68
68
69
69
</ head >
70
70
< body >
71
- < header data-kunai-mdinfo ="{"meta": {"header": ["algorithm"], "namespace": ["std::ranges"], "id-type": ["function template"], "cpp": ["cpp20"]}, "sources": [{"id": "006875fc53bafd7341a91de26398e22c293ec8f6", "source": "#include <algorithm>\n#include <iostream>\n#include <vector>\n\nint main() {\n std::vector<int> v = { 2,3,1,2,1 };\n\n auto result = std::ranges::remove(v, 1);\n\n // [v.begin(), result.begin()) \u306e\u7bc4\u56f2\u306b 1 \u3092\u9664\u53bb\u3057\u305f\u7d50\u679c\u304c\u5165\u3063\u3066\u3044\u308b\n for (int x : std::ranges::subrange {v.begin(), result.begin()}) {\n std::cout << x << \",\";\n }\n std::cout << std::endl;\n\n // remove \u3092\u4f7f\u3063\u3066\u3082\u30b3\u30f3\u30c6\u30ca\u306e\u8981\u7d20\u6570\u306f\u5909\u308f\u3089\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3088\u3046\n std::cout << \"size before: \" << v.size() << std::endl;\n\n // [v.begin(), result.begin()) \u306e\u7bc4\u56f2\u306b 1 \u3092\u9664\u53bb\u3057\u305f\u7d50\u679c\u304c\u5165\u3063\u3066\u3044\u308b\u306e\u3067\u3001\n // [result.begin(),v.end()) \u3092 erase \u3059\u308b\u3053\u3068\u3067\u30b5\u30a4\u30ba\u3082\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\n // \uff08Erase-remove \u30a4\u30c7\u30a3\u30aa\u30e0\uff09\n v.erase(result.begin(), v.end());\n std::cout << \"size after: \" << v.size() << std::endl;\n}\n"}], "page_id": ["reference", "algorithm", "ranges_remove"]} ">
71
+ < header data-kunai-mdinfo ="{"meta": {"header": ["algorithm"], "namespace": ["std::ranges"], "id-type": ["function template"], "cpp": ["cpp20"]}, "sources": [{"id": "006875fc53bafd7341a91de26398e22c293ec8f6", "source": "#include <algorithm>\n#include <iostream>\n#include <vector>\n\nint main() {\n std::vector<int> v = { 2,3,1,2,1 };\n\n auto result = std::ranges::remove(v, 1);\n\n // [v.begin(), result.begin()) \u306e\u7bc4\u56f2\u306b 1 \u3092\u9664\u53bb\u3057\u305f\u7d50\u679c\u304c\u5165\u3063\u3066\u3044\u308b\n for (int x : std::ranges::subrange {v.begin(), result.begin()}) {\n std::cout << x << \",\";\n }\n std::cout << std::endl;\n\n // remove \u3092\u4f7f\u3063\u3066\u3082\u30b3\u30f3\u30c6\u30ca\u306e\u8981\u7d20\u6570\u306f\u5909\u308f\u3089\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3088\u3046\n std::cout << \"size before: \" << v.size() << std::endl;\n\n // [v.begin(), result.begin()) \u306e\u7bc4\u56f2\u306b 1 \u3092\u9664\u53bb\u3057\u305f\u7d50\u679c\u304c\u5165\u3063\u3066\u3044\u308b\u306e\u3067\u3001\n // [result.begin(),v.end()) \u3092 erase \u3059\u308b\u3053\u3068\u3067\u30b5\u30a4\u30ba\u3082\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\n // \uff08Erase-remove \u30a4\u30c7\u30a3\u30aa\u30e0\uff09\n v.erase(result.begin(), v.end());\n std::cout << \"size after: \" << v.size() << std::endl;\n}\n"}, {"id": "8a9ffbb4a715e2295eb3f74b2aea18d011fc6760", "source": "#include <algorithm>\n#include <iostream>\n#include <vector>\n\nstruct Point {\n int x;\n int y;\n\n bool operator==(const Point& other) const = default;\n};\n\nint main() {\n std::vector<Point> v = {\n {1, 2},\n {3, 4},\n {5, 6},\n {1, 2},\n };\n\n // \u5024{1, 2}\u3092\u9664\u53bb\u3059\u308b\n std::ranges::subrange sr = std::ranges::remove(v, {1, 2});\n v.erase(sr.begin(), v.end());\n\n for (const Point& p : v) {\n std::cout << p.x << \",\" << p.y << std::endl;\n }\n}\n"}], "page_id": ["reference", "algorithm", "ranges_remove"]} ">
72
72
< nav class ="navbar navbar-default " role ="navigation ">
73
73
< div class ="container-fluid ">
74
74
< div class ="navbar-header ">
188
188
189
189
< p class ="text-right "> < small >
190
190
最終更新日時(UTC):
191
- < span itemprop ="datePublished " content ="2024-06-11T13:45:38 ">
192
- 2024年06月11日 13時45分38秒
191
+ < span itemprop ="datePublished " content ="2025-05-26T10:08:03 ">
192
+ 2025年05月26日 10時08分03秒
193
193
</ span >
194
194
< br />
195
195
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
224
224
< span class ="n "> S</ span > < span class ="n "> last</ span > < span class ="p "> ,</ span >
225
225
< span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
226
226
< span class ="n "> Proj</ span > < span class ="n "> proj</ span > < span class ="o "> =</ span > < span class ="p "> {});</ span > < span class ="c1 "> // (1) C++20</ span >
227
+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../iterator/permutable.html "> permutable</ a > </ span > < span class ="n "> I</ span > < span class ="p "> ,</ span >
228
+ < span class ="n "> < a href ="../iterator/sentinel_for.html "> sentinel_for</ a > </ span > < span class ="o "> <</ span > < span class ="n "> I</ span > < span class ="o "> ></ span > < span class ="n "> S</ span > < span class ="p "> ,</ span >
229
+ < span class ="k "> class</ span > < span class ="nc "> Proj</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../functional/identity.html "> identity</ a > </ span > < span class ="p "> ,</ span >
230
+ < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../iterator/projected_value_t.html "> projected_value_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> I</ span > < span class ="p "> ,</ span > < span class ="n "> Proj</ span > < span class ="o "> >></ span >
231
+ < span class ="n "> requires</ span > < span class ="n "> < a href ="../iterator/indirect_binary_predicate.html "> indirect_binary_predicate</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../functional/ranges_equal_to.html "> ranges::equal_to</ a > </ span > < span class ="p "> ,</ span > < span class ="n "> < a href ="../iterator/projected.html "> projected</ a > </ span > < span class ="o "> <</ span > < span class ="n "> I</ span > < span class ="p "> ,</ span > < span class ="n "> Proj</ span > < span class ="o "> ></ span > < span class ="p "> ,</ span > < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> *></ span >
232
+ < span class ="k "> constexpr</ span > < span class ="n "> < a href ="../ranges/subrange.html "> subrange</ a > </ span > < span class ="o "> <</ span > < span class ="n "> I</ span > < span class ="o "> ></ span >
233
+ < span class ="n "> remove</ span > < span class ="p "> (</ span > < span class ="n "> I</ span > < span class ="n "> first</ span > < span class ="p "> ,</ span >
234
+ < span class ="n "> S</ span > < span class ="n "> last</ span > < span class ="p "> ,</ span >
235
+ < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
236
+ < span class ="n "> Proj</ span > < span class ="n "> proj</ span > < span class ="o "> =</ span > < span class ="p "> {});</ span > < span class ="c1 "> // (1) C++26</ span >
227
237
228
238
< span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../ranges/forward_range.html "> forward_range</ a > </ span > < span class ="n "> R</ span > < span class ="p "> ,</ span >
229
239
< span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="p "> ,</ span >
238
248
< span class ="n "> remove</ span > < span class ="p "> (</ span > < span class ="n "> R</ span > < span class ="o "> &&</ span > < span class ="n "> r</ span > < span class ="p "> ,</ span >
239
249
< span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
240
250
< span class ="n "> Proj</ span > < span class ="n "> proj</ span > < span class ="o "> =</ span > < span class ="p "> {});</ span > < span class ="c1 "> // (2) C++20</ span >
251
+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../ranges/forward_range.html "> forward_range</ a > </ span > < span class ="n "> R</ span > < span class ="p "> ,</ span >
252
+ < span class ="k "> class</ span > < span class ="nc "> Proj</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../functional/identity.html "> identity</ a > </ span > < span class ="p "> ,</ span >
253
+ < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../iterator/projected_value_t.html "> projected_value_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../ranges/iterator_t.html "> iterator_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> R</ span > < span class ="o "> ></ span > < span class ="p "> ,</ span > < span class ="n "> Proj</ span > < span class ="o "> >></ span >
254
+ < span class ="n "> requires</ span > < span class ="n "> < a href ="../iterator/permutable.html "> permutable</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../ranges/iterator_t.html "> iterator_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> R</ span > < span class ="o "> >></ span > < span class ="o "> &&</ span >
255
+ < span class ="n "> < a href ="../iterator/indirect_binary_predicate.html "> indirect_binary_predicate</ a > </ span > < span class ="o "> <</ span >
256
+ < span class ="n "> < a href ="../functional/ranges_equal_to.html "> ranges::equal_to</ a > </ span > < span class ="p "> ,</ span >
257
+ < span class ="n "> < a href ="../iterator/projected.html "> projected</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../ranges/iterator_t.html "> iterator_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> R</ span > < span class ="o "> ></ span > < span class ="p "> ,</ span > < span class ="n "> Proj</ span > < span class ="o "> ></ span > < span class ="p "> ,</ span >
258
+ < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> *</ span >
259
+ < span class ="o "> ></ span >
260
+ < span class ="k "> constexpr</ span > < span class ="n "> < a href ="../ranges/borrowed_subrange_t.html "> borrowed_subrange_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> R</ span > < span class ="o "> ></ span >
261
+ < span class ="n "> remove</ span > < span class ="p "> (</ span > < span class ="n "> R</ span > < span class ="o "> &&</ span > < span class ="n "> r</ span > < span class ="p "> ,</ span >
262
+ < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
263
+ < span class ="n "> Proj</ span > < span class ="n "> proj</ span > < span class ="o "> =</ span > < span class ="p "> {});</ span > < span class ="c1 "> // (2) C++26</ span >
241
264
< span class ="p "> }</ span >
242
265
</ code > </ pre > </ div >
243
266
</ p >
@@ -256,9 +279,23 @@ <h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成
256
279
< h2 > 注意</ h2 >
257
280
< p > 安定。</ p >
258
281
< h2 > 備考</ h2 >
259
- < p > 有効な要素を範囲の前方に集める処理には、ムーブを使用する。</ p >
260
- < p > 取り除いた要素の先頭を指すイテレータを< code > ret</ code > とし、範囲< code > [ret, last)</ code > の各要素には、有効な要素からムーブされた値が設定される。それらの値は、「有効だが< a class ="cpprefjp-defined-word " data-desc ="未規定の動作。事前の断りなく処理系によって異なる動作をする " href ="../../implementation-compliance.html#dfn-unspecified-behavior "> 未規定</ a > な値」となる。</ p >
282
+ < ul >
283
+ < li > 有効な要素を範囲の前方に集める処理には、ムーブが使用される< ul >
284
+ < li > 取り除いた要素の先頭を指すイテレータを< code > ret</ code > とし、範囲< code > [ret, last)</ code > の各要素には、有効な要素からムーブされた値が設定される。それらの値は、「有効だが< a class ="cpprefjp-defined-word " data-desc ="未規定の動作。事前の断りなく処理系によって異なる動作をする " href ="../../implementation-compliance.html#dfn-unspecified-behavior "> 未規定</ a > な値」となる</ li >
285
+ </ ul >
286
+ </ li >
287
+ < li > (1), (2) :< ul >
288
+ < li > C++26 : 引数として波カッコ初期化< code > {}</ code > を受け付ける
289
+ < br />
290
+ < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="n "> < a href ="../vector/vector.html "> std::vector</ a > </ span > < span class ="o "> <</ span > < span class ="n "> T</ span > < span class ="o "> ></ span > < span class ="n "> v</ span > < span class ="p "> ;</ span >
291
+ < span class ="k "> auto</ span > < span class ="n "> sr</ span > < span class ="o "> =</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> ranges</ span > < span class ="o "> ::</ span > < span class ="n "> remove</ span > < span class ="p "> (</ span > < span class ="n "> v</ span > < span class ="p "> ,</ span > < span class ="p "> {</ span > < span class ="n "> a</ span > < span class ="p "> ,</ span > < span class ="n "> b</ span > < span class ="p "> });</ span >
292
+ </ code > </ pre > </ div >
293
+ </ li >
294
+ </ ul >
295
+ </ li >
296
+ </ ul >
261
297
< h2 > 例</ h2 >
298
+ < h3 > 基本的な使い方</ h3 >
262
299
< p > < div class ="yata " id ="006875fc53bafd7341a91de26398e22c293ec8f6 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../algorithm.html "> <algorithm></ a > </ span > < span class ="cp "> </ span >
263
300
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
264
301
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../vector.html "> <vector></ a > </ span > < span class ="cp "> </ span >
@@ -280,16 +317,50 @@ <h2>例</h2>
280
317
< span class ="c1 "> // [< a href ="../vector/vector/begin.html "> v.begin()</ a > , < span style ="color:#ff0000 "> result</ span > .begin()) の範囲に 1 を除去した結果が入っているので、</ span >
281
318
< span class ="c1 "> // [< span style ="color:#ff0000 "> result</ span > .begin(),< a href ="../vector/vector/end.html "> v.end()</ a > ) を erase することでサイズも変更することができる</ span >
282
319
< span class ="c1 "> // (< a href ="https://ja.wikibooks.org/wiki/More_C%2B%2B_Idioms/%E6%B6%88%E5%8E%BB%E3%83%BB%E5%89%8A%E9%99%A4(Erase-Remove) " target ="_blank "> Erase-remove イディオム</ a > )</ span >
283
- < span class ="n "> < span style =" color:#ff0000 "> v.erase</ span > </ span > < span class ="p "> (</ span > < span class ="n "> < span style ="color:#ff0000 "> result</ span > </ span > < span class ="p "> .</ span > < span class ="n "> begin</ span > < span class ="p "> (),</ span > < span class ="n "> < a href ="../vector/vector/end.html "> v.end()</ a > </ span > < span class ="p "> );</ span >
320
+ < span class ="n "> < a href =" ../vector/vector/erase.html "> v.erase</ a > </ span > < span class ="p "> (</ span > < span class ="n "> < span style ="color:#ff0000 "> result</ span > </ span > < span class ="p "> .</ span > < span class ="n "> begin</ span > < span class ="p "> (),</ span > < span class ="n "> < a href ="../vector/vector/end.html "> v.end()</ a > </ span > < span class ="p "> );</ span >
284
321
< span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="s "> "size after: "</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../vector/vector/size.html "> v.size()</ a > </ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
285
322
< span class ="p "> }</ span >
286
323
</ code > </ pre > </ div >
287
324
</ div > </ p >
288
- < h3 > 出力</ h3 >
325
+ < h4 > 出力</ h4 >
289
326
< p > < pre > < code > 2,3,2,
290
327
size before: 5
291
328
size after: 3
292
329
</ code > </ pre > </ p >
330
+ < h3 > 波カッコ初期化を入力として使用する (C++26)</ h3 >
331
+ < p > < div class ="yata " id ="8a9ffbb4a715e2295eb3f74b2aea18d011fc6760 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../algorithm.html "> <algorithm></ a > </ span > < span class ="cp "> </ span >
332
+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
333
+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../vector.html "> <vector></ a > </ span > < span class ="cp "> </ span >
334
+
335
+ < span class ="k "> struct</ span > < span class ="n "> Point</ span > < span class ="p "> {</ span >
336
+ < span class ="kt "> int</ span > < span class ="n "> x</ span > < span class ="p "> ;</ span >
337
+ < span class ="kt "> int</ span > < span class ="n "> y</ span > < span class ="p "> ;</ span >
338
+
339
+ < span class ="kt "> bool</ span > < span class ="k "> operator</ span > < span class ="o "> ==</ span > < span class ="p "> (</ span > < span class ="k "> const</ span > < span class ="n "> Point</ span > < span class ="o "> &</ span > < span class ="n "> other</ span > < span class ="p "> )</ span > < span class ="k "> const</ span > < span class ="o "> =</ span > < span class ="k "> default</ span > < span class ="p "> ;</ span >
340
+ < span class ="p "> };</ span >
341
+
342
+ < span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span > < span class ="p "> {</ span >
343
+ < span class ="n "> < a href ="../vector/vector.html "> std::vector</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Point</ span > < span class ="o "> ></ span > < span class ="n "> v</ span > < span class ="o "> =</ span > < span class ="p "> {</ span >
344
+ < span class ="p "> {</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 2</ span > < span class ="p "> },</ span >
345
+ < span class ="p "> {</ span > < span class ="mi "> 3</ span > < span class ="p "> ,</ span > < span class ="mi "> 4</ span > < span class ="p "> },</ span >
346
+ < span class ="p "> {</ span > < span class ="mi "> 5</ span > < span class ="p "> ,</ span > < span class ="mi "> 6</ span > < span class ="p "> },</ span >
347
+ < span class ="p "> {</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 2</ span > < span class ="p "> },</ span >
348
+ < span class ="p "> };</ span >
349
+
350
+ < span class ="c1 "> // 値{1, 2}を除去する</ span >
351
+ < span class ="n "> < a href ="../ranges/subrange.html "> std::ranges::subrange</ a > </ span > < span class ="n "> sr</ span > < span class ="o "> =</ span > < span class ="n "> < span style ="color:#ff0000 "> std::ranges::remove</ span > </ span > < span class ="p "> (</ span > < span class ="n "> v</ span > < span class ="p "> ,</ span > < span class ="p "> {</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 2</ span > < span class ="p "> });</ span >
352
+ < span class ="n "> < a href ="../vector/vector/erase.html "> v.erase</ a > </ span > < span class ="p "> (</ span > < span class ="n "> sr</ span > < span class ="p "> .</ span > < span class ="n "> begin</ span > < span class ="p "> (),</ span > < span class ="n "> < a href ="../vector/vector/end.html "> v.end()</ a > </ span > < span class ="p "> );</ span >
353
+
354
+ < span class ="k "> for</ span > < span class ="p "> (</ span > < span class ="k "> const</ span > < span class ="n "> Point</ span > < span class ="o "> &</ span > < span class ="nl "> p</ span > < span class ="p "> :</ span > < span class ="n "> v</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
355
+ < span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="n "> p</ span > < span class ="p "> .</ span > < span class ="n "> x</ span > < span class ="o "> <<</ span > < span class ="s "> ","</ span > < span class ="o "> <<</ span > < span class ="n "> p</ span > < span class ="p "> .</ span > < span class ="n "> y</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
356
+ < span class ="p "> }</ span >
357
+ < span class ="p "> }</ span >
358
+ </ code > </ pre > </ div >
359
+ </ div > </ p >
360
+ < h4 > 出力</ h4 >
361
+ < p > < pre > < code > 3,4
362
+ 5,6
363
+ </ code > </ pre > </ p >
293
364
< h2 > バージョン</ h2 >
294
365
< h3 > 言語</ h3 >
295
366
< ul >
@@ -305,6 +376,10 @@ <h3>処理系</h3>
305
376
< h2 > 参照</ h2 >
306
377
< ul >
307
378
< li > < a href ="https://timsong-cpp.github.io/cppwp/n4861/algorithms " target ="_blank "> N4861 25 Algorithms library</ a > </ li >
379
+ < li > < a href ="https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html " target ="_blank "> P2248R8 Enabling list-initialization for algorithms</ a > < ul >
380
+ < li > C++26で波カッコ初期化 (リスト初期化) に対応した</ li >
381
+ </ ul >
382
+ </ li >
308
383
</ ul > </ div >
309
384
310
385
</ div >
0 commit comments