Skip to content

Commit 8d8cf1d

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent 9abd264 commit 8d8cf1d

File tree

5 files changed

+461
-136
lines changed

5 files changed

+461
-136
lines changed

reference/algorithm/ranges_remove.html

Lines changed: 82 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868

6969
</head>
7070
<body>
71-
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;algorithm&#34;], &#34;namespace&#34;: [&#34;std::ranges&#34;], &#34;id-type&#34;: [&#34;function template&#34;], &#34;cpp&#34;: [&#34;cpp20&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;006875fc53bafd7341a91de26398e22c293ec8f6&#34;, &#34;source&#34;: &#34;#include &lt;algorithm&gt;\n#include &lt;iostream&gt;\n#include &lt;vector&gt;\n\nint main() {\n std::vector&lt;int&gt; 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 &lt;&lt; x &lt;&lt; \&#34;,\&#34;;\n }\n std::cout &lt;&lt; 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 &lt;&lt; \&#34;size before: \&#34; &lt;&lt; v.size() &lt;&lt; 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 &lt;&lt; \&#34;size after: \&#34; &lt;&lt; v.size() &lt;&lt; std::endl;\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;algorithm&#34;, &#34;ranges_remove&#34;]}">
71+
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;algorithm&#34;], &#34;namespace&#34;: [&#34;std::ranges&#34;], &#34;id-type&#34;: [&#34;function template&#34;], &#34;cpp&#34;: [&#34;cpp20&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;006875fc53bafd7341a91de26398e22c293ec8f6&#34;, &#34;source&#34;: &#34;#include &lt;algorithm&gt;\n#include &lt;iostream&gt;\n#include &lt;vector&gt;\n\nint main() {\n std::vector&lt;int&gt; 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 &lt;&lt; x &lt;&lt; \&#34;,\&#34;;\n }\n std::cout &lt;&lt; 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 &lt;&lt; \&#34;size before: \&#34; &lt;&lt; v.size() &lt;&lt; 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 &lt;&lt; \&#34;size after: \&#34; &lt;&lt; v.size() &lt;&lt; std::endl;\n}\n&#34;}, {&#34;id&#34;: &#34;8a9ffbb4a715e2295eb3f74b2aea18d011fc6760&#34;, &#34;source&#34;: &#34;#include &lt;algorithm&gt;\n#include &lt;iostream&gt;\n#include &lt;vector&gt;\n\nstruct Point {\n int x;\n int y;\n\n bool operator==(const Point&amp; other) const = default;\n};\n\nint main() {\n std::vector&lt;Point&gt; 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&amp; p : v) {\n std::cout &lt;&lt; p.x &lt;&lt; \&#34;,\&#34; &lt;&lt; p.y &lt;&lt; std::endl;\n }\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;algorithm&#34;, &#34;ranges_remove&#34;]}">
7272
<nav class="navbar navbar-default" role="navigation">
7373
<div class="container-fluid">
7474
<div class="navbar-header">
@@ -188,8 +188,8 @@
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-26T10:08:03">
192+
2025年05月26日 10時08分03秒
193193
</span>
194194
<br/>
195195
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -224,6 +224,16 @@
224224
<span class="n">S</span> <span class="n">last</span><span class="p">,</span>
225225
<span class="k">const</span> <span class="n">T</span><span class="o">&amp;</span> <span class="n">value</span><span class="p">,</span>
226226
<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">&lt;</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">&lt;</span><span class="n">I</span><span class="o">&gt;</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">&lt;</span><span class="n">I</span><span class="p">,</span> <span class="n">Proj</span><span class="o">&gt;&gt;</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">&lt;</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">&lt;</span><span class="n">I</span><span class="p">,</span> <span class="n">Proj</span><span class="o">&gt;</span><span class="p">,</span> <span class="k">const</span> <span class="n">T</span><span class="o">*&gt;</span>
232+
<span class="k">constexpr</span> <span class="n"><a href="../ranges/subrange.html">subrange</a></span><span class="o">&lt;</span><span class="n">I</span><span class="o">&gt;</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">&amp;</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>
227237

228238
<span class="k">template</span> <span class="o">&lt;</span><span class="n"><a href="../ranges/forward_range.html">forward_range</a></span> <span class="n">R</span><span class="p">,</span>
229239
<span class="k">class</span> <span class="nc">T</span><span class="p">,</span>
@@ -238,6 +248,19 @@
238248
<span class="n">remove</span><span class="p">(</span><span class="n">R</span><span class="o">&amp;&amp;</span> <span class="n">r</span><span class="p">,</span>
239249
<span class="k">const</span> <span class="n">T</span><span class="o">&amp;</span> <span class="n">value</span><span class="p">,</span>
240250
<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">&lt;</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">&lt;</span><span class="n"><a href="../ranges/iterator_t.html">iterator_t</a></span><span class="o">&lt;</span><span class="n">R</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">Proj</span><span class="o">&gt;&gt;</span>
254+
<span class="n">requires</span> <span class="n"><a href="../iterator/permutable.html">permutable</a></span><span class="o">&lt;</span><span class="n"><a href="../ranges/iterator_t.html">iterator_t</a></span><span class="o">&lt;</span><span class="n">R</span><span class="o">&gt;&gt;</span> <span class="o">&amp;&amp;</span>
255+
<span class="n"><a href="../iterator/indirect_binary_predicate.html">indirect_binary_predicate</a></span><span class="o">&lt;</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">&lt;</span><span class="n"><a href="../ranges/iterator_t.html">iterator_t</a></span><span class="o">&lt;</span><span class="n">R</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">Proj</span><span class="o">&gt;</span><span class="p">,</span>
258+
<span class="k">const</span> <span class="n">T</span><span class="o">*</span>
259+
<span class="o">&gt;</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">&lt;</span><span class="n">R</span><span class="o">&gt;</span>
261+
<span class="n">remove</span><span class="p">(</span><span class="n">R</span><span class="o">&amp;&amp;</span> <span class="n">r</span><span class="p">,</span>
262+
<span class="k">const</span> <span class="n">T</span><span class="o">&amp;</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>
241264
<span class="p">}</span>
242265
</code></pre></div>
243266
</p>
@@ -256,9 +279,23 @@ <h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成
256279
<h2>注意</h2>
257280
<p>安定。</p>
258281
<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">&lt;</span><span class="n">T</span><span class="o">&gt;</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>
261297
<h2></h2>
298+
<h3>基本的な使い方</h3>
262299
<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">&lt;algorithm&gt;</a></span><span class="cp"></span>
263300
<span class="cp">#include</span> <span class="cpf"><a href="../iostream.html">&lt;iostream&gt;</a></span><span class="cp"></span>
264301
<span class="cp">#include</span> <span class="cpf"><a href="../vector.html">&lt;vector&gt;</a></span><span class="cp"></span>
@@ -280,16 +317,50 @@ <h2>例</h2>
280317
<span class="c1">// [<a href="../vector/vector/begin.html">v.begin()</a>, <span style="color:#ff0000">result</span>.begin()) の範囲に 1 を除去した結果が入っているので、</span>
281318
<span class="c1">// [<span style="color:#ff0000">result</span>.begin(),<a href="../vector/vector/end.html">v.end()</a>) を erase することでサイズも変更することができる</span>
282319
<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>
284321
<span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o">&lt;&lt;</span> <span class="s">"size after: "</span> <span class="o">&lt;&lt;</span> <span class="n"><a href="../vector/vector/size.html">v.size()</a></span> <span class="o">&lt;&lt;</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span>
285322
<span class="p">}</span>
286323
</code></pre></div>
287324
</div></p>
288-
<h3>出力</h3>
325+
<h4>出力</h4>
289326
<p><pre><code>2,3,2,
290327
size before: 5
291328
size after: 3
292329
</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">&lt;algorithm&gt;</a></span><span class="cp"></span>
332+
<span class="cp">#include</span> <span class="cpf"><a href="../iostream.html">&lt;iostream&gt;</a></span><span class="cp"></span>
333+
<span class="cp">#include</span> <span class="cpf"><a href="../vector.html">&lt;vector&gt;</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">&amp;</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">&lt;</span><span class="n">Point</span><span class="o">&gt;</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">&amp;</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">&lt;&lt;</span> <span class="n">p</span><span class="p">.</span><span class="n">x</span> <span class="o">&lt;&lt;</span> <span class="s">","</span> <span class="o">&lt;&lt;</span> <span class="n">p</span><span class="p">.</span><span class="n">y</span> <span class="o">&lt;&lt;</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>
293364
<h2>バージョン</h2>
294365
<h3>言語</h3>
295366
<ul>
@@ -305,6 +376,10 @@ <h3>処理系</h3>
305376
<h2>参照</h2>
306377
<ul>
307378
<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>
308383
</ul></div>
309384

310385
</div>

0 commit comments

Comments
 (0)