我知道如何使用非平凡的初始值填充std :: vector,例如序列号:
void IndexArray( unsigned int length, std::vector& v ) { v.resize(length); for ( unsigned int i = 0; i < length; ++i ) { v[i] = i; } }
但这是一个for循环.有没有一种优雅的方法来使用stl功能(而不是使用Boost)使用更少的代码行?
您可以使用generate算法,以更简单的方式填充容器:
#include#include #include struct c_unique { int current; c_unique() {current=0;} int operator()() {return ++current;} } UniqueNumber; int main () { vector myvector (8); generate (myvector.begin(), myvector.end(), UniqueNumber); cout << "\nmyvector contains:"; for (vector ::iterator it=myvector.begin(); it!=myvector.end(); ++it) cout << " " << *it; cout << endl; return 0; }
这是从cplusplusreference无耻地解除和编辑.
我通常选择std::generate
加一个简单的发电机:
templatestruct gen { T x; gen(T seed) : x(seed) { } T operator ()() { return x++; } }; generate(a.begin(), a.end(), gen (0));