55
66``` cpp
77namespace std {
8- template <class ForwardIterator, class T>
9- void fill(ForwardIterator first,
10- ForwardIterator last,
11- const T& value); // (1) C++03
12-
13- template <class ForwardIterator, class T>
14- constexpr void fill(ForwardIterator first,
15- ForwardIterator last,
16- const T& value); // (1) C++20
17-
18- template <class ExecutionPolicy, class ForwardIterator,
8+ template <class ForwardIterator,
9+ class T>
10+ void
11+ fill(ForwardIterator first,
12+ ForwardIterator last,
13+ const T& value); // (1) C++03
14+ template <class ForwardIterator,
1915 class T>
20- void fill(ExecutionPolicy&& exec,
21- ForwardIterator first,
22- ForwardIterator last,
23- const T& value); // (2) C++17
16+ constexpr void
17+ fill(ForwardIterator first,
18+ ForwardIterator last,
19+ const T& value); // (1) C++20
20+ template <class ForwardIterator,
21+ class T = typename iterator_traits<ForwardIterator >::value_type>
22+ constexpr void
23+ fill(ForwardIterator first,
24+ ForwardIterator last,
25+ const T& value); // (1) C++20
26+
27+ template <class ExecutionPolicy,
28+ class ForwardIterator,
29+ class T>
30+ void
31+ fill(ExecutionPolicy&& exec,
32+ ForwardIterator first,
33+ ForwardIterator last,
34+ const T& value); // (2) C++17
35+ template <class ExecutionPolicy,
36+ class ForwardIterator,
37+ class T = typename iterator_traits<ForwardIterator >::value_type>
38+ void
39+ fill(ExecutionPolicy&& exec,
40+ ForwardIterator first,
41+ ForwardIterator last,
42+ const T& value); // (2) C++26
2443}
2544```
2645
2746## 概要
2847イテレータ範囲`[first, last)`のすべての要素に指定された値を書き込む。
2948
3049
31- ## 要件
50+ ## 適格要件
3251`value` は `output iterator` へ書き込み可能でなければならない
3352
3453
@@ -40,7 +59,17 @@ namespace std {
4059正確に `last - first` 回の代入を行う
4160
4261
62+ ## 備考
63+ - (1), (2) :
64+ - C++26 : 引数として波カッコ初期化`{}`を受け付ける
65+ ```cpp
66+ std::vector<T> v;
67+ std::fill(v.begin(), v.end(), {a, b});
68+ ```
69+
70+
4371## 例
72+ ### 基本的な使い方
4473```cpp example
4574#include <algorithm>
4675#include <iostream>
@@ -57,11 +86,45 @@ int main() {
5786```
5887* std::fill[ color ff0000]
5988
60- ### 出力
89+ #### 出力
6190```
62913,3,3,3,3,
6392```
6493
94+ ### 波カッコ初期化を入力として使用する (C++26)
95+ ``` cpp example
96+ #include < algorithm>
97+ #include < iostream>
98+ #include < vector>
99+
100+ struct Point {
101+ int x;
102+ int y;
103+
104+ bool operator==(const Point& other) const = default;
105+ };
106+
107+ int main() {
108+ std::vector<Point > v(5);
109+
110+ std::fill(v.begin(), v.end(), {1, 2});
111+
112+ for (const Point& p : v) {
113+ std::cout << p.x << "," << p.y << std::endl;
114+ }
115+ }
116+ ```
117+ * std::fill[color ff0000]
118+
119+ #### 出力
120+ ```
121+ 1,2
122+ 1,2
123+ 1,2
124+ 1,2
125+ 1,2
126+ ```
127+
65128
66129## 実装例
67130```cpp
@@ -75,3 +138,5 @@ void fill(ForwardIterator first, ForwardIterator last, const T& value) {
75138
76139## 参照
77140- [ P0202R3 Add Constexpr Modifiers to Functions in ` <algorithm> ` and ` <utility> ` Headers] ( http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0202r3.html )
141+ - [ P2248R8 Enabling list-initialization for algorithms] ( https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html )
142+ - C++26で波カッコ初期化 (リスト初期化) に対応した
0 commit comments