6868
6969 </ head >
7070 < body >
71- < header data-kunai-mdinfo ="{"meta": {"header": ["algorithm"], "namespace": ["std::ranges"], "id-type": ["function template"], "cpp": ["cpp20"]}, "sources": [{"id": "766c4224ae1573936005c31ade6bcdda973dd836", "source": "#include <algorithm>\n#include <iostream>\n#include <vector>\n#include <iterator>\n\nint main() {\n std::vector<int> v = { 2,3,1,2,1 };\n\n // 1 \u3092\u9664\u53bb\u3057\u305f\u7d50\u679c\u3092\u51fa\u529b\u3059\u308b\n std::ranges::remove_copy(v, std::ostream_iterator<int>(std::cout, \",\"), 1);\n}\n"}], "page_id": ["reference", "algorithm", "ranges_remove_copy"]} ">
71+ < header data-kunai-mdinfo ="{"meta": {"header": ["algorithm"], "namespace": ["std::ranges"], "id-type": ["function template"], "cpp": ["cpp20"]}, "sources": [{"id": "766c4224ae1573936005c31ade6bcdda973dd836", "source": "#include <algorithm>\n#include <iostream>\n#include <vector>\n#include <iterator>\n\nint main() {\n std::vector<int> v = { 2,3,1,2,1 };\n\n // 1 \u3092\u9664\u53bb\u3057\u305f\u7d50\u679c\u3092\u51fa\u529b\u3059\u308b\n std::ranges::remove_copy(v, std::ostream_iterator<int>(std::cout, \",\"), 1);\n}\n"}, {"id": "ca1eee6e847653c5f671afb6fee9f51e3908de4d", "source": "#include <algorithm>\n#include <iostream>\n#include <vector>\n#include <iterator>\n\nstruct Point {\n int x;\n int y;\n\n bool operator==(const Point& other) const = default;\n};\n\nstd::ostream& operator<<(std::ostream& os, const Point& p) {\n return os << p.x << \",\" << p.y;\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\u3057\u305f\u7d50\u679c\u3092\u51fa\u529b\u3059\u308b\n std::ranges::remove_copy(\n v,\n std::ostream_iterator<Point>(std::cout, \"\\n\"),\n {1, 2}\n );\n}\n"}], "page_id": ["reference", "algorithm", "ranges_remove_copy"]} ">
7272 < nav class ="navbar navbar-default " role ="navigation ">
7373 < div class ="container-fluid ">
7474 < div class ="navbar-header ">
188188
189189 < p class ="text-right "> < small >
190190 最終更新日時(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-27T05:13:34 ">
192+ 2025年05月27日 05時13分34秒
193193 </ span >
194194 < br />
195195 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
231231 < span class ="n "> O</ span > < span class ="n "> result</ span > < span class ="p "> ,</ span >
232232 < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
233233 < 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 >
234+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../iterator/input_iterator.html "> input_iterator</ a > </ span > < span class ="n "> I</ span > < span class ="p "> ,</ span >
235+ < 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 >
236+ < span class ="n "> < a href ="../iterator/weakly_incrementable.html "> weakly_incrementable</ a > </ span > < span class ="n "> O</ span > < span class ="p "> ,</ span >
237+ < 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 >
238+ < 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 >
239+ < span class ="n "> requires</ span > < span class ="n "> < a href ="../iterator/indirectly_copyable.html "> indirectly_copyable</ a > </ span > < span class ="o "> <</ span > < span class ="n "> I</ span > < span class ="p "> ,</ span > < span class ="n "> O</ span > < span class ="o "> ></ span > < span class ="o "> &&</ span >
240+ < span class ="n "> < a href ="../iterator/indirect_binary_predicate.html "> indirect_binary_predicate</ a > </ span > < span class ="o "> <</ span >
241+ < span class ="n "> < a href ="../functional/ranges_equal_to.html "> ranges::equal_to</ a > </ span > < span class ="p "> ,</ span >
242+ < 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 >
243+ < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> *</ span >
244+ < span class ="o "> ></ span >
245+ < span class ="k "> constexpr</ span > < span class ="n "> < a href ="ranges_in_out_result.html "> remove_copy_result</ a > </ span > < span class ="o "> <</ span > < span class ="n "> I</ span > < span class ="p "> ,</ span > < span class ="n "> O</ span > < span class ="o "> ></ span >
246+ < span class ="n "> remove_copy</ span > < span class ="p "> (</ span > < span class ="n "> I</ span > < span class ="n "> first</ span > < span class ="p "> ,</ span >
247+ < span class ="n "> S</ span > < span class ="n "> last</ span > < span class ="p "> ,</ span >
248+ < span class ="n "> O</ span > < span class ="n "> result</ span > < span class ="p "> ,</ span >
249+ < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
250+ < 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 >
234251
235252 < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../ranges/input_range.html "> input_range</ a > </ span > < span class ="n "> R</ span > < span class ="p "> ,</ span >
236253 < span class ="n "> < a href ="../iterator/weakly_incrementable.html "> weakly_incrementable</ a > </ span > < span class ="n "> O</ span > < span class ="p "> ,</ span >
247264 < span class ="n "> O</ span > < span class ="n "> result</ span > < span class ="p "> ,</ span >
248265 < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
249266 < 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 >
267+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../ranges/input_range.html "> input_range</ a > </ span > < span class ="n "> R</ span > < span class ="p "> ,</ span >
268+ < span class ="n "> < a href ="../iterator/weakly_incrementable.html "> weakly_incrementable</ a > </ span > < span class ="n "> O</ span > < span class ="p "> ,</ span >
269+ < 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 >
270+ < 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 >
271+ < span class ="n "> requires</ span > < span class ="n "> < a href ="../iterator/indirectly_copyable.html "> indirectly_copyable</ 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 "> O</ span > < span class ="o "> ></ span > < span class ="o "> &&</ span >
272+ < span class ="n "> < a href ="../iterator/indirect_binary_predicate.html "> indirect_binary_predicate</ a > </ span > < span class ="o "> <</ span >
273+ < span class ="n "> < a href ="../functional/ranges_equal_to.html "> ranges::equal_to</ a > </ span > < span class ="p "> ,</ span >
274+ < 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 >
275+ < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> *</ span >
276+ < span class ="o "> ></ span >
277+ < span class ="k "> constexpr</ span > < span class ="n "> < a href ="ranges_in_out_result.html "> remove_copy_result</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../ranges/borrowed_iterator_t.html "> borrowed_iterator_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> R</ span > < span class ="o "> ></ span > < span class ="p "> ,</ span > < span class ="n "> O</ span > < span class ="o "> ></ span >
278+ < span class ="n "> remove_copy</ span > < span class ="p "> (</ span > < span class ="n "> R</ span > < span class ="o "> &&</ span > < span class ="n "> r</ span > < span class ="p "> ,</ span >
279+ < span class ="n "> O</ span > < span class ="n "> result</ span > < span class ="p "> ,</ span >
280+ < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
281+ < 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 >
250282< span class ="p "> }</ span >
251283</ code > </ pre > </ div >
252284</ p >
@@ -267,8 +299,20 @@ <h2><a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価
267299< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Complexity。関数が使うアルゴリズムの空間計算量・時間計算量 "> 計算量</ a > </ h2 >
268300< p > 正確に < code > last - first</ code > 回の比較を行う</ p >
269301< h2 > 備考</ h2 >
270- < p > 安定。</ p >
302+ < ul >
303+ < li > 安定。</ li >
304+ < li > (1), (2) :< ul >
305+ < li > C++26 : 引数として波カッコ初期化< code > {}</ code > を受け付ける
306+ < br />
307+ < 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 >
308+ < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> ranges</ span > < span class ="o "> ::</ span > < span class ="n "> remove_copy</ span > < span class ="p "> (</ span > < span class ="n "> v</ span > < span class ="p "> ,</ span > < span class ="n "> result</ 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 >
309+ </ code > </ pre > </ div >
310+ </ li >
311+ </ ul >
312+ </ li >
313+ </ ul >
271314< h2 > 例</ h2 >
315+ < h3 > 基本的な使い方</ h3 >
272316< p > < div class ="yata " id ="766c4224ae1573936005c31ade6bcdda973dd836 "> < 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 >
273317< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
274318< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../vector.html "> <vector></ a > </ span > < span class ="cp "> </ span >
@@ -282,9 +326,47 @@ <h2>例</h2>
282326< span class ="p "> }</ span >
283327</ code > </ pre > </ div >
284328</ div > </ p >
285- < h3 > 出力</ h3 >
329+ < h4 > 出力</ h4 >
286330< p > < pre > < code > 2,3,2,
287331</ code > </ pre > </ p >
332+ < h3 > 波カッコ初期化を入力として使用する (C++26)</ h3 >
333+ < p > < div class ="yata " id ="ca1eee6e847653c5f671afb6fee9f51e3908de4d "> < 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 >
334+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
335+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../vector.html "> <vector></ a > </ span > < span class ="cp "> </ span >
336+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iterator.html "> <iterator></ a > </ span > < span class ="cp "> </ span >
337+
338+ < span class ="k "> struct</ span > < span class ="n "> Point</ span > < span class ="p "> {</ span >
339+ < span class ="kt "> int</ span > < span class ="n "> x</ span > < span class ="p "> ;</ span >
340+ < span class ="kt "> int</ span > < span class ="n "> y</ span > < span class ="p "> ;</ span >
341+
342+ < 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 >
343+ < span class ="p "> };</ span >
344+
345+ < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> ostream</ span > < span class ="o "> &</ span > < span class ="k "> operator</ span > < span class ="o "> <<</ span > < span class ="p "> (</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> ostream</ span > < span class ="o "> &</ span > < span class ="n "> os</ span > < span class ="p "> ,</ span > < span class ="k "> const</ span > < span class ="n "> Point</ span > < span class ="o "> &</ span > < span class ="n "> p</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
346+ < span class ="k "> return</ span > < span class ="n "> os</ 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 ="p "> ;</ span >
347+ < span class ="p "> }</ span >
348+
349+ < span class ="kt "> int</ span > < span class ="n "> main</ span > < span class ="p "> ()</ span > < span class ="p "> {</ span >
350+ < 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 >
351+ < 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 ="p "> {</ span > < span class ="mi "> 3</ span > < span class ="p "> ,</ span > < span class ="mi "> 4</ span > < span class ="p "> },</ span >
353+ < span class ="p "> {</ span > < span class ="mi "> 5</ span > < span class ="p "> ,</ span > < span class ="mi "> 6</ span > < span class ="p "> },</ span >
354+ < span class ="p "> {</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 2</ span > < span class ="p "> },</ span >
355+ < span class ="p "> };</ span >
356+
357+ < span class ="c1 "> // 値{1, 2}を除去した結果を出力する</ span >
358+ < span class ="n "> < span style ="color:#ff0000 "> std::ranges::remove_copy</ span > </ span > < span class ="p "> (</ span >
359+ < span class ="n "> v</ span > < span class ="p "> ,</ span >
360+ < span class ="n "> < a href ="../iterator/ostream_iterator.html "> std::ostream_iterator</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Point</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="p "> ,</ span > < span class ="s "> "</ span > < span class ="se "> \n</ span > < span class ="s "> "</ span > < span class ="p "> ),</ span >
361+ < span class ="p "> {</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 2</ span > < span class ="p "> }</ span >
362+ < span class ="p "> );</ span >
363+ < span class ="p "> }</ span >
364+ </ code > </ pre > </ div >
365+ </ div > </ p >
366+ < h4 > 出力</ h4 >
367+ < p > < pre > < code > 3,4
368+ 5,6
369+ </ code > </ pre > </ p >
288370< h2 > バージョン</ h2 >
289371< h3 > 言語</ h3 >
290372< ul >
@@ -300,6 +382,10 @@ <h3>処理系</h3>
300382< h2 > 参照</ h2 >
301383< ul >
302384< li > < a href ="https://timsong-cpp.github.io/cppwp/n4861/algorithms " target ="_blank "> N4861 25 Algorithms library</ a > </ li >
385+ < 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 >
386+ < li > C++26で波カッコ初期化 (リスト初期化) に対応した</ li >
387+ </ ul >
388+ </ li >
303389</ ul > </ div >
304390
305391 </ div >
0 commit comments