std::generate_n 的返回值迭代器,你能用它做什么?

Nat*_*mon 4 c++ algorithm iterator std return-value

出于好奇!

你可以用回做什么iteratorstd::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 显示了一些成员函数,但它们主要是运算符。

eer*_*ika 5

这是一个输出迭代器。您可以像使用任何输出迭代器一样使用它。它与您作为第一个参数传递的类型相同 - 甚至在没有生成任何内容的情况下也是相同的值。

后置插入器并不是最理想的例子,因为它并不真正关心位置(有趣的事实:增加后置插入器什么也没做)。一个更重要的用例是现有元素的迭代器,在这种情况下,我们关心正在写入哪些元素。

一个扩展示例,为同一个容器使用两个不同的生成器:

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)