【问题标题】:How can I work with vectors if I don't initialize it first?如果我不先初始化向量,如何使用它?
【发布时间】:2020-12-06 08:35:51
【问题描述】:

我正在使用 C++ 中的 <algorithm> 库。 我有一个std::vector 的练习。

如果我不先像这样std::vector<int> v(10,0); 初始化矢量,我该如何使用它?

std::vector<int> vec;
int i = 0;
std::generate_n(vec, 10, [int& i](){i += 10; return i});

我希望它是vec={10,20,30,40,50,60,70,80,90,100}

【问题讨论】:

标签: c++ lambda stl c++17 stdvector


【解决方案1】:

您可以使用std::back_inserter(和std::back_insert_iterator),它在容器上执行push_back 来插入元素。例如

std::vector<int> vec;
vec.reserve(10); // if the size could be determined in advance
int i=0;
std::generate_n(std::back_inserter(vec), 10, [&i](){i+=10; return i;} );

【讨论】:

  • 谢谢,如果我想将一些元素复制到其他数组,我不知道大小是多少,我该怎么做?谢谢
  • @newstudent 如果无法提前知道大小,那么就不要使用reserve,让std::vector自行增长。
  • @newstudent 即使使用了reserve,它仍然是空的;在这种情况下,一起使用 std::back_inserter 应该没问题。
  • 如果我想打印应该是倒数之和的 r 值,这段代码好吗?双 r; std::for_each(v.begin(),v.end(),[&r](int i){ r+=1/i; } );还是我应该以其他方式进行
  • @newstudent 你应该将r初始化为double r = 0.0,注意1/i的结果会是int并被截断,你可以把它改成1.0 / i
猜你喜欢
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多