使用std :: fill填充数量不断增加的向量 [英] use std::fill to populate vector with increasing numbers

查看:71
本文介绍了使用std :: fill填充数量不断增加的向量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用 std :: fill 来填充 vector< int> ,但不要使用一个值,向量之后应该包含递增顺序的数字。

I would like to fill a vector<int> using std::fill, but instead of one value, the vector should contain numbers in increasing order after.

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

I tried achieving this by iterating the third parameter of the function by one, but this would only give me either vectors filled with 1 or 2 (depending of the position of the ++ operator).

示例:

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


推荐答案

最好使用 std :: iota 像这样:

Preferably use std::iota like this:

std::vector<int> v(100) ; // vector with 100 ints.
std::iota (std::begin(v), std::end(v), 0); // Fill with 0, 1, ..., 99.

如果您不这样做,没有任何 c ++ 11 支持(仍然是我工作中的实际问题),请使用 std :: generate

That said, if you don't have any c++11 support (still a real problem where I work), use std::generate like this:

struct IncGenerator {
    int current_;
    IncGenerator (int start) : current_(start) {}
    int operator() () { return current_++; }
};

// ...

std::vector<int> v(100) ; // vector with 100 ints.
IncGenerator g (0);
std::generate( v.begin(), v.end(), g); // Fill with the result of calling g() repeatedly.

这篇关于使用std :: fill填充数量不断增加的向量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆