在许多语言中,有一些生成器可以帮助初始化集合。在 C++ 中,如果想要统一初始化一个向量,可以这样写:
std::vector<int> vec(10, 42); // get 10 elements, each equals 42
如果想即时生成不同的值怎么办?例如,用 10 个随机值,或者从 0 到 9 的连续数字对其进行初始化?这种语法会很方便,但在 C++11中不起作用:
int cnt = 0;
std::vector<int> vec(10, [&cnt]()->int { return cnt++;});
有没有一种通过迭代函数调用来初始化集合的好方法?我目前使用这种丑陋的模式(不比循环更具可读性/短):
std::vector<int> vec;
int cnt = 0;
std::generate_n(std::back_inserter(vec), 10, [&cnt]()->int { return cnt++;});
有一件事会有所帮助,它可以解释第一个构造函数的缺失。我可以想象一个迭代器,它接受一个函数和调用次数,所以构造函数
vector ( InputIterator first, InputIterator last);
将适用。但是我在标准库中没有找到类似的东西。我错过了吗?第一个构造函数没有达到标准还有其他原因吗?