generate_n

将函数对象生成的值分配给范围中指定数量的元素,并返回到超出最后一个分配值的下一位置。

template<class OutputIterator, class Diff, class Generator> void generate_n( OutputIterator First, Diff Count, Generator Gen);

参数

  • First
    寻址要分配值的范围中的第一个元素位置的输出迭代器。

  • Count
    指定生成器函数要将值分配到的元素数的有符号或无符号整型。

  • Gen
    用于生成要分配到范围中的每个元素的值的未使用任何参数调用的函数对象。

备注

为范围中的每个元素调用函数对象,并且每次调用它时,都无需返回相同的值。 例如,它可能会读取文件或引用和修改本地状态。 生成器的结果类型必须可以转换为范围中转发迭代器的值类型。

引用的范围必须有效;所有指针都必须可以引用,并且在序列中,通过递增必须可从第一个位置到达最后一个位置。

复杂性是线性的,对将需要的生成器具有确切的 Count 次调用。

示例

// cl.exe /EHsc /nologo /W4 /MTd
#include <vector>
#include <deque>
#include <iostream>
#include <string>
#include <algorithm>
#include <random>

using namespace std;

template <typename C> void print(const string& s, const C& c) {
    cout << s;

    for (const auto& e : c) {
        cout << e << " ";
    }

    cout << endl;
}

int main()
{
    const int elemcount = 5;
    vector<int> v(elemcount);
    deque<int> dq(elemcount);

    // Set up random number distribution
    random_device rd;
    mt19937 engine(rd());
    uniform_int_distribution<int> dist(-9, 9);

    // Call generate_n, using a lambda for the third parameter
    generate_n(v.begin(), elemcount, [&](){ return dist(engine); });
    print("vector v is: ", v);

    generate_n(dq.begin(), elemcount, [&](){ return dist(engine); });
    print("deque dq is: ", dq);
}

输出

vector v is: 1 -9 -3 2 -9
deque dq is: -9 7 -2 4 8

要求

标头:<algorithm>

命名空间: std

请参见

参考

generate_n(STL 示例)

标准模板库