Nat*_*mon 4 c++ algorithm iterator std return-value
出于好奇!
你可以用回做什么iterator的std::generate_n?
返回值:
迭代器经过分配的最后一个元素 if
count > 0,否则首先。
std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
auto iterator = std::generate_n(std::back_inserter(v), 10, [&]() {return j++;});
std::cout << "type: " << typeid(iterator).name() << '\n';
/*
for (iterator = v.begin(); iterator< v.end(); iterator++){
std::cout << *iterator << " " << endl;
}
*/
for(auto a : v)
std::cout << a << " ";
std::cout << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出:
type: St20back_insert_iteratorISt6vectorIiSaIiEEE
1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
iterator 显示了一些成员函数,但它们主要是运算符。
这是一个输出迭代器。您可以像使用任何输出迭代器一样使用它。它与您作为第一个参数传递的类型相同 - 甚至在没有生成任何内容的情况下也是相同的值。
后置插入器并不是最理想的例子,因为它并不真正关心位置(有趣的事实:增加后置插入器什么也没做)。一个更重要的用例是现有元素的迭代器,在这种情况下,我们关心正在写入哪些元素。
一个扩展示例,为同一个容器使用两个不同的生成器:
auto generator1 = [&]() { return j++; };
auto generator2 = [&]() { return j--; };
auto it = v.begin();
it = std::generate_n(it, 5, generator1);
it = std::generate_n(it, 5, generator2);
Run Code Online (Sandbox Code Playgroud)