std::ranges::fill_n
ja.cppreference.net より
| ヘッダ <algorithm>
|
||
| で定義 |
||
template< class T, std::output_iterator<const T&> O >
constexpr O fill_n( O first, std::iter_difference_t<O> n, const T& value );
|
呼び出しシグネチャ (C++20 以降) |
|
template< class O, class T = std::iter_value_t<O> >
requires std::output_iterator<O, const T&>
constexpr O fill_n( O first, std::iter_difference_t<O> n, const T& value );
|
(C++26 まで) | |
(C++26 以降)value指定された[first, first + n)を範囲
内のすべての要素に代入します。 このページで説明されている関数のようなエンティティはアルゴリズム関数オブジェクト(非公式にniebloids
- として知られています)であり、すなわち:
- それらのいずれかを呼び出す際に、明示的なテンプレート引数リストを指定することはできません。それらのいずれも引数依存の名前探索
- には見えません。それらのいずれかが関数呼び出し演算子の左側の名前として通常の非修飾名前探索によって見つかった場合、引数依存の名前探索
パラメータ
| first | - | 変更する要素範囲の先頭 |
| n | - | 変更する要素の数 |
| value | - | 代入する値 |
戻り値
first + n と等しいと比較される出力イテレータ。
計算量
正確に n 回の代入。
実装例
struct fill_n_fn { template<class O, class T = std::iter_value_t<O>> requires std::output_iterator<O, const T&> constexpr O operator()(O first, std::iter_difference_t<O> n, const T& value) const { for (std::iter_difference_t<O> i {}; i != n; ++first, ++i) *first = value; return first; } }; inline constexpr fill_n_fn fill_n {}; |
注記
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_algorithm_default_value_type
|
202403
|
(C++26) | リスト初期化 アルゴリズム用 |
例
このコードを実行
#include <algorithm> #include <complex> #include <iostream> #include <string> #include <vector> void println(const auto& v) { for (const auto& elem : v) std::cout << ' ' << elem; std::cout << '\n'; } int main() { constexpr auto n{8}; std::vector<std::string> v(n, "▓▓░░"); println(v); std::ranges::fill_n(v.begin(), n, "░░▓▓"); println(v); std::vector<std::complex<double>> nums{{1, 3}, {2, 2}, {4, 8}}; println(nums); #ifdef __cpp_lib_algorithm_default_value_type std::ranges::fill_n(nums.begin(), 2, {4, 2}); #else std::ranges::fill_n(nums.begin(), 2, std::complex<double>{4, 2}); #endif println(nums); }
出力:
▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ▓▓░░ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ ░░▓▓ (1,3) (2,2) (4,8) (4,2) (4,2) (4,8)
関連項目
|
(C++20)
|
範囲の要素に特定の値を代入する
(アルゴリズム関数オブジェクト) |
|
(C++20)
|
指定された数の要素を新しい位置にコピーする
(アルゴリズム関数オブジェクト) |
|
(C++20)
|
関数の結果を範囲に保存する
(アルゴリズム関数オブジェクト) |
|
(C++20)
|
範囲の要素に関数を適用する
(アルゴリズム関数オブジェクト) |
|
(C++26)
|
一様乱数ビット生成器からの乱数で範囲を埋める
(アルゴリズム関数オブジェクト) |
|
指定された値を範囲内のN個の要素にコピー代入する
(関数テンプレート) |