std::ranges::fill_n
From cppreference.com
| ヘッダー <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以降) (C++26まで) |
|
| template< class O, class T = std::iter_value_t<O> > requires std::output_iterator<O, const T&> |
(C++26以降) | |
範囲[first, first + n)のすべての要素に、指定されたvalueを代入します。
このページで説明されている関数のようなエンティティは、アルゴリズム関数オブジェクト(非公式にはニーブロイドとして知られている)です。つまり、
- これらのいずれかを呼び出す際に、明示的なテンプレート引数リストを指定することはできません。
- これらのいずれも実引数依存の名前探索には見えません。
- これらのいずれかが関数呼び出し演算子の左側の名前として通常の非修飾名探索によって見つかった場合、実引数依存の名前探索は抑制されます。
目次 |
[編集] パラメータ
| 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個の要素に指定された値をコピー代入する (関数テンプレート) |