从顺序值中快速创建矢量

Ala*_*ejo 5 c++

如何从顺序值中快速创建矢量

例如.:

vector<int> vec (4, 100);
for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
    cout << *it << endl;
}
Run Code Online (Sandbox Code Playgroud)

日期:

# 100
# 100
# 100
# 100
Run Code Online (Sandbox Code Playgroud)

我想要

vector<int> vec (100, "0 to N");
Run Code Online (Sandbox Code Playgroud)

我想知道实现这一结果的最有效方法.例如,不使用循环.

它是一个运行时变量.

Ret*_*nja 22

这是另一种方式......

int start = 27;
std::vector<int> v(100);
std::iota(v.begin(), v.end(), start);
Run Code Online (Sandbox Code Playgroud)


Die*_*ühl 16

这是一个不使用可见循环的版本,只有标准C++库.它很好地演示了使用lambda作为生成器.使用reserve()是可选的,只是为了避免多个内存分配.

std::vector<int> v;
v.reserve(100);
int n(0);
std::generate_n(std::back_inserter(v), 100, [n]()mutable { return n++; });
Run Code Online (Sandbox Code Playgroud)

  • 这可以简化为`std :: generate_n(std :: back_inserter(v),100,[&](){return v.size();});` (2认同)