Skip to content

Commit e36b137

Browse files
committed
コンテナのstd::erase : C++26の波カッコ初期化対応 #1311
1 parent 003bb89 commit e36b137

File tree

5 files changed

+217
-10
lines changed

5 files changed

+217
-10
lines changed

reference/deque/deque/erase_free.md

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77
```cpp
88
namespace std {
99
template <class T, class Allocator, class U>
10-
typename deque<T, Allocator>::size_type erase(deque<T, Allocator>& c, const U& value);
10+
typename deque<T, Allocator>::size_type
11+
erase(deque<T, Allocator>& c, const U& value); // (1) C++20
12+
template <class T, class Allocator, class U = T>
13+
typename deque<T, Allocator>::size_type
14+
erase(deque<T, Allocator>& c, const U& value); // (1) C++26
1115
}
1216
```
1317
@@ -35,7 +39,18 @@ return r;
3539
削除した要素数を返す。
3640
3741
42+
## 備考
43+
- (1) :
44+
- C++26 : 引数として波カッコ初期化`{}`を受け付ける
45+
```cpp
46+
std::deque<std::vector<int>> d;
47+
erase(d, {}); // 空の要素を削除
48+
erase(d, {1, 2, 3}); // 値{1, 2, 3}をもつ要素を削除
49+
```
50+
51+
3852
## 例
53+
### 基本的な使い方
3954
```cpp example
4055
#include <iostream>
4156
#include <deque>
@@ -54,13 +69,39 @@ int main()
5469
```
5570
* std::erase[color ff0000]
5671

57-
### 出力
72+
#### 出力
5873
```
5974
3
6075
4
6176
5
6277
```
6378

79+
### 波カッコ初期化を入力として使用する (C++26)
80+
```cpp example
81+
#include <print>
82+
#include <deque>
83+
#include <vector>
84+
85+
int main() {
86+
std::deque<std::vector<int>> d = {
87+
{1, 2, 3},
88+
{4, 5, 6},
89+
{},
90+
{7, 8}
91+
};
92+
93+
std::erase(d, {}); // 空の要素を削除
94+
std::erase(d, {1, 2, 3}); // 値{1, 2, 3}をもつ要素を削除
95+
96+
std::println("{}", d);
97+
}
98+
```
99+
100+
#### 出力
101+
```
102+
[[4, 5, 6], [7, 8]]
103+
```
104+
64105
## バージョン
65106
### 言語
66107
- C++20
@@ -74,3 +115,5 @@ int main()
74115
## 参照
75116
- [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html)
76117
- [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf)
118+
- [P2248R8 Enabling list-initialization for algorithms](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html)
119+
- C++26で波カッコ初期化 (リスト初期化) に対応した

reference/forward_list/forward_list/erase_free.md

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77
```cpp
88
namespace std {
99
template <class T, class Allocator, class U>
10-
typename forward_list<T, Allocator>::size_type erase(forward_list<T, Allocator>& c, const U& value);
10+
typename forward_list<T, Allocator>::size_type
11+
erase(forward_list<T, Allocator>& c, const U& value); // (1) C++20
12+
template <class T, class Allocator, class U = T>
13+
typename forward_list<T, Allocator>::size_type
14+
erase(forward_list<T, Allocator>& c, const U& value); // (1) C++26
1115
}
1216
```
1317
@@ -28,7 +32,18 @@ erase_if(c, [&](auto& elem) { return elem == value; });
2832
削除した要素数を返す。
2933
3034
35+
## 備考
36+
- (1) :
37+
- C++26 : 引数として波カッコ初期化`{}`を受け付ける
38+
```cpp
39+
std::forward_list<std::vector<int>> ls;
40+
erase(ls, {}); // 空の要素を削除
41+
erase(ls, {1, 2, 3}); // 値{1, 2, 3}をもつ要素を削除
42+
```
43+
44+
3145
## 例
46+
### 基本的な使い方
3247
```cpp example
3348
#include <iostream>
3449
#include <forward_list>
@@ -47,13 +62,39 @@ int main()
4762
```
4863
* std::erase[color ff0000]
4964

50-
### 出力
65+
#### 出力
5166
```
5267
3
5368
4
5469
5
5570
```
5671

72+
### 波カッコ初期化を入力として使用する (C++26)
73+
```cpp example
74+
#include <print>
75+
#include <forward_list>
76+
#include <vector>
77+
78+
int main() {
79+
std::forward_list<std::vector<int>> ls = {
80+
{1, 2, 3},
81+
{4, 5, 6},
82+
{},
83+
{7, 8}
84+
};
85+
86+
std::erase(ls, {}); // 空の要素を削除
87+
std::erase(ls, {1, 2, 3}); // 値{1, 2, 3}をもつ要素を削除
88+
89+
std::println("{}", ls);
90+
}
91+
```
92+
93+
#### 出力
94+
```
95+
[[4, 5, 6], [7, 8]]
96+
```
97+
5798
## バージョン
5899
### 言語
59100
- C++20
@@ -67,3 +108,5 @@ int main()
67108
## 参照
68109
- [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html)
69110
- [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf)
111+
- [P2248R8 Enabling list-initialization for algorithms](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html)
112+
- C++26で波カッコ初期化 (リスト初期化) に対応した

reference/list/list/erase_free.md

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77
```cpp
88
namespace std {
99
template <class T, class Allocator, class U>
10-
typename list<T, Allocator>::size_type erase(list<T, Allocator>& c, const U& value);
10+
typename list<T, Allocator>::size_type
11+
erase(list<T, Allocator>& c, const U& value); // (1) C++20
12+
template <class T, class Allocator, class U = T>
13+
typename list<T, Allocator>::size_type
14+
erase(list<T, Allocator>& c, const U& value); // (1) C++26
1115
}
1216
```
1317
@@ -28,7 +32,18 @@ erase_if(c, [&](auto& elem) { return elem == value; });
2832
削除した要素数を返す。
2933
3034
35+
## 備考
36+
- (1) :
37+
- C++26 : 引数として波カッコ初期化`{}`を受け付ける
38+
```cpp
39+
std::list<std::vector<int>> ls;
40+
erase(ls, {}); // 空の要素を削除
41+
erase(ls, {1, 2, 3}); // 値{1, 2, 3}をもつ要素を削除
42+
```
43+
44+
3145
## 例
46+
### 基本的な使い方
3247
```cpp example
3348
#include <iostream>
3449
#include <list>
@@ -47,13 +62,39 @@ int main()
4762
```
4863
* std::erase[color ff0000]
4964

50-
### 出力
65+
#### 出力
5166
```
5267
3
5368
4
5469
5
5570
```
5671

72+
### 波カッコ初期化を入力として使用する (C++26)
73+
```cpp example
74+
#include <print>
75+
#include <list>
76+
#include <vector>
77+
78+
int main() {
79+
std::list<std::vector<int>> ls = {
80+
{1, 2, 3},
81+
{4, 5, 6},
82+
{},
83+
{7, 8}
84+
};
85+
86+
std::erase(ls, {}); // 空の要素を削除
87+
std::erase(ls, {1, 2, 3}); // 値{1, 2, 3}をもつ要素を削除
88+
89+
std::println("{}", ls);
90+
}
91+
```
92+
93+
#### 出力
94+
```
95+
[[4, 5, 6], [7, 8]]
96+
```
97+
5798
## バージョン
5899
### 言語
59100
- C++20
@@ -67,3 +108,5 @@ int main()
67108
## 参照
68109
- [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html)
69110
- [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf)
111+
- [P2248R8 Enabling list-initialization for algorithms](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html)
112+
- C++26で波カッコ初期化 (リスト初期化) に対応した

reference/string/basic_string/erase_free.md

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
namespace std {
99
template <class CharT, class Traits, class Allocator, class U>
1010
constexpr typename basic_string<CharT, Traits, Allocator>::size_type
11-
erase(basic_string<CharT, Traits, Allocator>& c, const U& value);
11+
erase(basic_string<CharT, Traits, Allocator>& c, const U& value); // (1) C++20
12+
template <class CharT, class Traits, class Allocator, class U = CharT>
13+
constexpr typename basic_string<CharT, Traits, Allocator>::size_type
14+
erase(basic_string<CharT, Traits, Allocator>& c, const U& value); // (1) C++26
1215
}
1316
```
1417
@@ -36,7 +39,17 @@ return r;
3639
削除した要素数を返す。
3740
3841
42+
## 備考
43+
- (1) :
44+
- C++26 : 引数として波カッコ初期化`{}`を受け付ける
45+
```cpp
46+
erase(s, {}); // ヌル文字'\0'を削除
47+
erase(s, {'a'}); // 文字'a'を削除
48+
```
49+
50+
3951
## 例
52+
### 基本的な使い方
4053
```cpp example
4154
#include <iostream>
4255
#include <string>
@@ -53,11 +66,33 @@ int main()
5366
```
5467
* std::erase[color ff0000]
5568

56-
### 出力
69+
#### 出力
5770
```
5871
HelloWorld
5972
```
6073

74+
### 波カッコ初期化を入力文字として使用する (C++26)
75+
```cpp example
76+
#include <iostream>
77+
#include <string>
78+
79+
int main() {
80+
const char ar[] = "hel\0lo";
81+
std::string s(ar, ar + sizeof(ar));
82+
83+
std::erase(s, {});
84+
std::erase(s, {'l'});
85+
86+
std::cout << s << std::endl;
87+
}
88+
```
89+
90+
#### 出力
91+
```
92+
heo
93+
```
94+
95+
6196
## バージョン
6297
### 言語
6398
- C++20
@@ -71,3 +106,5 @@ HelloWorld
71106
## 参照
72107
- [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html)
73108
- [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf)
109+
- [P2248R8 Enabling list-initialization for algorithms](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html)
110+
- C++26で波カッコ初期化 (リスト初期化) に対応した

reference/vector/vector/erase_free.md

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
namespace std {
99
template <class T, class Allocator, class U>
1010
constexpr typename vector<T, Allocator>::size_type
11-
erase(vector<T, Allocator>& c, const U& value);
11+
erase(vector<T, Allocator>& c, const U& value); // (1) C++20
12+
template <class T, class Allocator, class U = T>
13+
constexpr typename vector<T, Allocator>::size_type
14+
erase(vector<T, Allocator>& c, const U& value); // (1) C++26
1215
}
1316
```
1417
@@ -36,7 +39,18 @@ return r;
3639
削除した要素数を返す。
3740
3841
42+
## 備考
43+
- (1) :
44+
- C++26 : 引数として波カッコ初期化`{}`を受け付ける
45+
```cpp
46+
std::vector<std::vector<int>> v;
47+
erase(v, {}); // 空の要素を削除
48+
erase(v, {1, 2, 3}); // 値{1, 2, 3}をもつ要素を削除
49+
```
50+
51+
3952
## 例
53+
### 基本的な使い方
4054
```cpp example
4155
#include <iostream>
4256
#include <vector>
@@ -55,13 +69,38 @@ int main()
5569
```
5670
* std::erase[color ff0000]
5771

58-
### 出力
72+
#### 出力
5973
```
6074
3
6175
4
6276
5
6377
```
6478

79+
### 波カッコ初期化を入力として使用する (C++26)
80+
```cpp example
81+
#include <print>
82+
#include <vector>
83+
84+
int main() {
85+
std::vector<std::vector<int>> v = {
86+
{1, 2, 3},
87+
{4, 5, 6},
88+
{},
89+
{7, 8}
90+
};
91+
92+
std::erase(v, {}); // 空の要素を削除
93+
std::erase(v, {1, 2, 3}); // 値{1, 2, 3}をもつ要素を削除
94+
95+
std::println("{}", v);
96+
}
97+
```
98+
99+
#### 出力
100+
```
101+
[[4, 5, 6], [7, 8]]
102+
```
103+
65104
## バージョン
66105
### 言語
67106
- C++20
@@ -75,3 +114,5 @@ int main()
75114
## 参照
76115
- [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html)
77116
- [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf)
117+
- [P2248R8 Enabling list-initialization for algorithms](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html)
118+
- C++26で波カッコ初期化 (リスト初期化) に対応した

0 commit comments

Comments
 (0)