function template
<algorithm>

std::generate_n

template <class OutputIterator, class Size, class Generator>  void generate_n (OutputIterator first, Size n, Generator gen);
template <class OutputIterator, class Size, class Generator>  OutputIterator generate_n (OutputIterator first, Size n, Generator gen);
為序列生成值(使用函式)
將序列中由 `first` 指向的 `n` 個元素賦值為由 `gen` 連續呼叫產生的值。

此函式模板的行為等同於
1
2
3
4
5
6
7
8
template <class OutputIterator, class Size, class Generator>
  void generate_n ( OutputIterator first, Size n, Generator gen )
{
  while (n>0) {
    *first = gen();
    ++first; --n;
  }
}

引數

first
輸出迭代器,指向序列的起始位置。該序列至少有 `n` 個元素,並且其元素型別可被賦值為 `gen` 返回值的型別。
n
要生成的值得數量。
此值不得為負。
如果為負,函式不執行任何操作。
Size 必須是(可轉換為)整數型別。
gen
生成器函式,呼叫時不帶引數,並返回某個值,該值可轉換為迭代器指向的型別。
這可以是函式指標或函式物件。

返回值


一個指向序列中已生成最後一個元素之後元素的迭代器。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// generate_n example
#include <iostream>     // std::cout
#include <algorithm>    // std::generate_n

int current = 0;
int UniqueNumber () { return ++current; }

int main () {
  int myarray[9];

  std::generate_n (myarray, 9, UniqueNumber);

  std::cout << "myarray contains:";
  for (int i=0; i<9; ++i)
    std::cout << ' ' << myarray[i];
  std::cout << '\n';

  return 0;
}

可能的輸出
myarray contains: 1 2 3 4 5 6 7 8 9


複雜度

線性時間複雜度(與 `n` 相關):呼叫 `gen` 並對每個元素執行一次賦值操作。

資料競爭

由 `first` 指向的範圍的前 `n` 個物件被修改(每個物件被修改一次)。

異常

如果 `gen`、元素賦值或迭代器操作丟擲異常,則此函式也丟擲異常。
請注意,無效引數會導致未定義行為

另見