Skip to content

Latest commit

 

History

History
56 lines (45 loc) · 1.39 KB

generate_n.md

File metadata and controls

56 lines (45 loc) · 1.39 KB

#generate_n

namespace std {
  template <class OutputIterator, class Size, class Generator>
  OutputIterator generate_n(OutputIterator first, Size n, Generator gen);
}

###概要 出力の範囲へ関数の結果を n 個書き込む。

###効果 n が 1 以上の場合、[first,last) のそれぞれのイテレータについて関数オブジェクト gen を呼び出し、その戻り値を代入する。 そうでない場合、何も起こらない。

###要件 gen は引数を取らず、Size は integral type に変換可能でなければならない。

###戻り値 n が 1 以上の場合、first + n が返される。 そうでない場合、first が返される。

###計算量 n が 1 以上の場合、n 回の gen の呼び出しと代入が行われる。 そうでない場合、何も行わない。

###実装例

template <class OutputIterator, class Size, class Generator>
OutputIterator generate_n(OutputIterator first, Size n, Generator gen) {
  while (n-- > 0)
    *first++ = gen();
}

###使用例

#include <algorithm>
#include <iostream>
#include <iterator>
 
int main() {
  // 2 のべき乗の値を生成して出力する
  int n = 1;
  std::generate_n(std::ostream_iterator<int>(std::cout, ","),
    10, [&n]{ auto t = n; n *= 2; return t; });
}
  • generate_n[color ff0000]

###出力

1,2,4,8,16,32,64,128,256,512,