如何从顺序值中快速创建矢量
例如:
vector<int> vec (4, 100);
for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
cout << *it << endl;
}
输出:
# 100
# 100
# 100
# 100
我想要
vector<int> vec (100, "0 to N");
我想知道实现此结果的最有效方法。例如,不使用循环。
N是运行时变量。
答案 0 :(得分:22)
这是另一种方式......
int start = 27;
std::vector<int> v(100);
std::iota(v.begin(), v.end(), start);
答案 1 :(得分: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++; });
答案 2 :(得分:1)
你想要这样的东西:
std::vector<unsigned int> second(
boost::counting_iterator<unsigned int>(0U),
boost::counting_iterator<unsigned int>(99U));
答案 3 :(得分:1)
使用生成算法:
#include <iostream> // std::cout
#include <algorithm> // std::generate
#include <vector> // std::vector
#include <iterator>
// function generator:
struct one_more {
int _count;
one_more() : _count(0) {}
int operator()() {
return _count++;
}
};
int main () {
std::vector<int> myvector (100);
std::generate (myvector.begin(), myvector.end(), one_more());
std::copy(myvector.begin(), myvector.end(), std::ostream_iterator<int>(std::cout, " "));
return 0;
}
答案 4 :(得分:0)
const int num_seconds = 100;
vector<int> second( num_seconds );
for( int n = 0 ; n < num_seconds ; ++n ) {
second[ n ] = n;
}
答案 5 :(得分:0)
我知道这是一个老问题,但我现在正在玩library来处理这个问题。它需要c ++ 14。
#include "htl.hpp"
htl::Token _;
std::vector<int> vec = _[0, _, 100];
// or
for (auto const e: _[0, _, 100]) { ... }