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