GeezerVison is showing cpprefjp.github.io — std::generate_n - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月20日 18時40分00秒 (JST)
rotarymars
が更新
履歴
編集
function template
<algorithm>
std:: generate_n
namespace std {
template < class OutputIterator , class Size , class Generator >
void
generate_n ( OutputIterator first ,
Size n ,
Generator gen ); // (1) C++98
template < class OutputIterator , class Size , class Generator >
OutputIterator
generate_n ( OutputIterator first ,
Size n ,
Generator gen ); // (1) C++11
template < class OutputIterator , class Size , class Generator >
constexpr OutputIterator
generate_n ( OutputIterator first ,
Size n ,
Generator gen ); // (1) C++20
template < class ExecutionPolicy , class ForwardIterator , class Size , class Generator >
ForwardIterator
generate_n ( ExecutionPolicy && exec ,
ForwardIterator first ,
Size n ,
Generator gen ); // (2) C++17
}
概要
イテレータ範囲[first, first + n) (範囲の先頭N要素) に関数genの結果を書き込む。
テンプレートパラメータ制約
gen は引数をとらないこと。
Size は整数型に変換可能であること。
効果
n が 1 以上の場合、イテレータ範囲[first,first + n) のそれぞれのイテレータについて関数オブジェクト gen を呼び出し、その戻り値を代入する。
そうでない場合、何もしない。
戻り値
C++98 まで
無し
C++11 から
n が 1 以上の場合、first + n が返される。
そうでない場合、first が返される。
計算量
n が 1 以上の場合、n 回の gen の呼び出しと代入が行われる。
そうでない場合、何もしない。
例
出力
1,2,4,8,16,32,64,128,256,512,
実装例
template < class OutputIterator , class Size , class Generator >
#if __cplusplus >= 201103L
OutputIterator
#else
void
#endif
generate_n ( OutputIterator first , Size n , Generator gen ) {
while ( n -- > 0 )
* first ++ = gen ();
#if __cplusplus >= 201103L
return first ;
#endif
}
処理系
Clang : 9.0.1 ✅
GCC : 9.1.0 ✅
Visual C++ : 2005 ✅ , 2008 ✅ , 2010 ✅ , 2012 ✅ , 2013 ✅ , 2015 ✅
C++11への対応(戻り値の変更)は2012から。
関連項目
参照