使用 std::fill 以增加数字填充向量

新手上路,请多包涵

我想填充一个 vector<int> 使用 std::fill ,但不是一个值,该向量应该包含之后按升序排列的数字。

我尝试通过将函数的第三个参数迭代一个来实现这一点,但这只会给我填充 1 或 2 的向量(取决于 ++ 运算符的位置)。

例子:

 vector<int> ivec;
int i = 0;
std::fill(ivec.begin(), ivec.end(), i++); // elements are set to 1
std::fill(ivec.begin(), ivec.end(), ++i); // elements are set to 2

原文由 BlackMamba 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 558
1 个回答

我发现最好的方法是使用 std::generate_nstd::back_insert_iterator 。这个例子实际上是在 std::back_insert_iterator 的 cppreference 页面中 给出的。但是,我将对这个示例进行的一项更改是保留您将要进行的插入次数,以最大限度地减少重新分配,如下所示:

 std::vector<int> v;
v.reserve(10);
std::generate_n(std::back_insert_iterator<std::vector<int>>(v), 10, [n=0]() mutable { return ++n; });

原文由 amirt01 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题