Skip to content

Commit 2006c9f

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent bd861cd commit 2006c9f

3 files changed

Lines changed: 141 additions & 314 deletions

File tree

‎reference/algorithm/equal.html‎

Lines changed: 44 additions & 4 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&#34;], &#34;id-type&#34;: [&#34;function template&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;e11448478d59a803eab835e51d930796d7df1b10&#34;, &#34;source&#34;: &#34;#include &lt;algorithm&gt;\n#include &lt;iostream&gt;\n#include &lt;vector&gt;\n#include &lt;array&gt;\n#include &lt;iterator&gt;\n\nint main() {\n std::vector&lt;int&gt; v = { 1,2,3,4,3,2 };\n std::array&lt;int, 6&gt; v2 = { 1,2,3,4,2,1 };\n\n // \u30b3\u30f3\u30c6\u30ca\u306e\u4e2d\u8eab\u304c\u540c\u3058\u304b\u3069\u3046\u304b\u8abf\u3079\u308b\n bool result = std::equal(std::begin(v), std::end(v), std::begin(v2), std::end(v2));\n std::cout &lt;&lt; std::boolalpha &lt;&lt; result &lt;&lt; std::endl;\n\n // x\u00b11 \u306e\u8aa4\u5dee\u3092\u8a31\u3059\u3088\u3046\u306b\u3059\u308b\n bool result2 = std::equal(std::begin(v), std::end(v), std::begin(v2), std::end(v2),\n [](int x, int y) { return x - 1 &lt;= y &amp;&amp; y &lt;= x + 1; });\n std::cout &lt;&lt; std::boolalpha &lt;&lt; result2 &lt;&lt; std::endl;\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;algorithm&#34;, &#34;equal&#34;]}">
71+
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;algorithm&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;id-type&#34;: [&#34;function template&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;e11448478d59a803eab835e51d930796d7df1b10&#34;, &#34;source&#34;: &#34;#include &lt;algorithm&gt;\n#include &lt;iostream&gt;\n#include &lt;vector&gt;\n#include &lt;array&gt;\n#include &lt;iterator&gt;\n\nint main() {\n std::vector&lt;int&gt; v = { 1,2,3,4,3,2 };\n std::array&lt;int, 6&gt; v2 = { 1,2,3,4,2,1 };\n\n // \u30b3\u30f3\u30c6\u30ca\u306e\u4e2d\u8eab\u304c\u540c\u3058\u304b\u3069\u3046\u304b\u8abf\u3079\u308b\n bool result = std::equal(std::begin(v), std::end(v), std::begin(v2), std::end(v2));\n std::cout &lt;&lt; std::boolalpha &lt;&lt; result &lt;&lt; std::endl;\n\n // x\u00b11 \u306e\u8aa4\u5dee\u3092\u8a31\u3059\u3088\u3046\u306b\u3059\u308b\n bool result2 = std::equal(std::begin(v), std::end(v), std::begin(v2), std::end(v2),\n [](int x, int y) { return x - 1 &lt;= y &amp;&amp; y &lt;= x + 1; });\n std::cout &lt;&lt; std::boolalpha &lt;&lt; result2 &lt;&lt; std::endl;\n}\n&#34;}, {&#34;id&#34;: &#34;0f83917d8a918c8f5c36b89e72c4832611f52f31&#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; v1 = { 1, 2, 3 };\n std::vector&lt;int&gt; v2 = { 1, 2, 3, 4 };\n std::vector&lt;int&gt; v3 = { 1, 2 };\n\n std::cout &lt;&lt; std::boolalpha;\n\n // v2\u306fv1\u3068\u540c\u3058\u304b\u305d\u308c\u4ee5\u4e0a\u306e\u8981\u7d20\u6570\u3092\u3082\u3064\u3053\u3068\u304c\u308f\u304b\u3063\u3066\u3044\u308b\u305f\u3081\u3001\u5b89\u5168\u306b\u4f7f\u7528\u3067\u304d\u308b\n std::cout &lt;&lt; std::equal(v1.begin(), v1.end(), v2.begin()) &lt;&lt; std::endl;\n\n // \u5371\u967a\u306a\u4f8b\u3002\n // v3\u306e\u8981\u7d20\u6570\u306fv1\u3088\u308a\u5c11\u306a\u3044\u305f\u3081\u3001v3\u306e\u7bc4\u56f2\u5916\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001\u52d5\u4f5c\u306f\u672a\u5b9a\u7fa9\u3068\u306a\u308b\n // std::cout &lt;&lt; std::equal(v1.begin(), v1.end(), v3.begin()) &lt;&lt; std::endl;\n\n // \u7d42\u7aef\u3092\u6307\u5b9a\u3059\u308b(3)\u3067\u3042\u308c\u3070\u3001\u8981\u7d20\u6570\u304c\u7570\u306a\u308b\u3053\u3068\u3092\u691c\u51fa\u3057\u3066false\u3092\u8fd4\u3059\n std::cout &lt;&lt; std::equal(v1.begin(), v1.end(), v3.begin(), v3.end()) &lt;&lt; std::endl;\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;algorithm&#34;, &#34;equal&#34;]}">
7272
<nav class="navbar navbar-default" role="navigation">
7373
<div class="container-fluid">
7474
<div class="navbar-header">
@@ -189,8 +189,8 @@
189189
<p class="text-right"><small>
190190
最終更新日時:
191191
<time itemprop="datePublished" class="js-local-time"
192-
datetime="2026-08-25T12:11:17+09:00">
193-
2026年08月25日 12時11分17秒 (JST)
192+
datetime="2026-09-11T12:03:49+09:00">
193+
2026年09月11日 12時03分49秒 (JST)
194194
</time>
195195
<br/>
196196
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -328,6 +328,11 @@ <h2>概要</h2>
328328
</ul>
329329
<p>2つの<a class="cpprefjp-defined-word" data-desc="2つのイテレータで表現される半開区間を表す。C++20からイテレータと番兵で異なる型であっても指定可能になる">イテレータ範囲</a>が異なる要素数であった場合、<code>false</code>を返す。</p>
330330
<p>2つの<a class="cpprefjp-defined-word" data-desc="2つのイテレータで表現される半開区間を表す。C++20からイテレータと番兵で異なる型であっても指定可能になる">イテレータ範囲</a>が要素数および各要素が等値であった場合、<code>true</code>を返す。</p>
331+
<h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Preconditions。関数呼び出し時に満たされていると関数が想定する条件。満たさなければ未定義の動作。契約属性の`[[expects]]`に相当">事前条件</a></h2>
332+
<ul>
333+
<li>(1), (2), (5), (6) : <code>[first2, first2 + (last1 - first1))</code>が妥当な<a class="cpprefjp-defined-word" data-desc="2つのイテレータで表現される半開区間を表す。C++20からイテレータと番兵で異なる型であっても指定可能になる">イテレータ範囲</a>であること</li>
334+
<li>(3), (4), (7), (8) : <code>[first2, last2)</code>が妥当な<a class="cpprefjp-defined-word" data-desc="2つのイテレータで表現される半開区間を表す。C++20からイテレータと番兵で異なる型であっても指定可能になる">イテレータ範囲</a>であること</li>
335+
</ul>
331336
<h2><a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価結果となるオブジェクト・値">戻り値</a></h2>
332337
<p><code>last2</code> が与えられている形式の場合、もし <code>last1 - first1 != last2 - first2</code> であれば、<code>false</code> を返す。<br />
333338
そうでない場合、<code>[first1,last1)</code> 内のイテレータ <code>i</code> について、<code>*i == *(first2 + (i - first1))</code> もしくは <code>pred(*i, *(first2 + (i - first1))) != false</code> が全てのイテレータ <code>i</code> について満たされているのであれば <code>true</code> を返す。<br />
@@ -340,9 +345,15 @@ <h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成
340345
</ul>
341346
<h2>備考</h2>
342347
<ul>
348+
<li>(1), (2), (5), (6) : これらの<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>は、<code>first2</code>から始まる範囲の長さを検査しない。<code>first2</code>側の要素数が<code>[first1, last1)</code>の要素数より少ない場合、範囲外アクセスによって<a class="cpprefjp-defined-word" data-desc="未定義の動作。処理系は予期せぬ動作をする可能性がある。要するに動作保証対象外。undefined behavior (UB)。" href="../../implementation-compliance.html#dfn-undefined-behavior">動作は未定義</a>となり、クラッシュする可能性がある<ul>
349+
<li><code>first2</code>側の範囲が<code>[first1, last1)</code>と同じかそれ以上の要素数をもつことが保証できない場合は、範囲の終端<code>last2</code>を受け取る(3), (4)を使用すること。(3), (4)は要素数が異なる場合に<code>false</code>を返す</li>
350+
</ul>
351+
</li>
343352
<li>ランダムアクセスイテレータの範囲を使用する場合、状況によっては(1), (2)のバージョンよりも、(3), (4)を使用する方が効率がよくなることが期待できる。ランダムアクセスイテレータはイテレータ同士の差を定数時間で求められるため、イテレーションを行うことなく2つの範囲の要素数が異なることを検出できるためである</li>
344353
</ul>
345354
<h2>例</h2>
355+
<h3>基本的な使い方 ((3), (4))</h3>
356+
<p>2つの<a class="cpprefjp-defined-word" data-desc="2つのイテレータで表現される半開区間を表す。C++20からイテレータと番兵で異なる型であっても指定可能になる">イテレータ範囲</a>の終端をどちらも指定するバージョンである。要素数が異なる場合は<code>false</code>を返す。</p>
346357
<p><div class="yata" id="e11448478d59a803eab835e51d930796d7df1b10"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../algorithm.html">&lt;algorithm&gt;</a></span>
347358
<span class="cp">#include <a href="../iostream.html">&lt;iostream&gt;</a></span>
348359
<span class="cp">#include <a href="../vector.html">&lt;vector&gt;</a></span>
@@ -364,10 +375,39 @@ <h2>例</h2>
364375
<span class="p">}</span>
365376
</code></pre></div>
366377
</div></p>
367-
<h3>出力</h3>
378+
<h4>出力</h4>
368379
<p><pre><code>false
369380
true
370381
</code></pre></p>
382+
<h3>片方の<a class="cpprefjp-defined-word" data-desc="2つのイテレータで表現される半開区間を表す。C++20からイテレータと番兵で異なる型であっても指定可能になる">イテレータ範囲</a>の終端を指定しない場合 ((1), (2))</h3>
383+
<p><code>first2</code>から始まる範囲の終端を指定しないバージョンである。この範囲の長さは検査されないため、<code>first2</code>側の要素数が足りない場合は範囲外アクセスとなり、<a class="cpprefjp-defined-word" data-desc="未定義の動作。処理系は予期せぬ動作をする可能性がある。要するに動作保証対象外。undefined behavior (UB)。" href="../../implementation-compliance.html#dfn-undefined-behavior">動作は未定義</a>となる。</p>
384+
<p><div class="yata" id="0f83917d8a918c8f5c36b89e72c4832611f52f31"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../algorithm.html">&lt;algorithm&gt;</a></span>
385+
<span class="cp">#include <a href="../iostream.html">&lt;iostream&gt;</a></span>
386+
<span class="cp">#include <a href="../vector.html">&lt;vector&gt;</a></span>
387+
388+
<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
389+
<span class="w"> </span><span class="n"><a href="../vector/vector.html">std::vector</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">v1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="p">};</span>
390+
<span class="w"> </span><span class="n"><a href="../vector/vector.html">std::vector</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">v2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="p">};</span>
391+
<span class="w"> </span><span class="n"><a href="../vector/vector.html">std::vector</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">v3</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="p">};</span>
392+
393+
<span class="w"> </span><span class="n"><a href="../iostream/cout.html">std::cout</a></span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n"><a href="../ios/boolalpha.html">std::boolalpha</a></span><span class="p">;</span>
394+
395+
<span class="w"> </span><span class="c1">// v2はv1と同じかそれ以上の要素数をもつことがわかっているため、安全に使用できる</span>
396+
<span class="w"> </span><span class="n"><a href="../iostream/cout.html">std::cout</a></span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n"><span style="color:#ff0000">std::equal</span></span><span class="p">(</span><span class="n"><a href="../vector/vector/begin.html">v1.begin()</a></span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../vector/vector/end.html">v1.end()</a></span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../vector/vector/begin.html">v2.begin()</a></span><span class="p">)</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span>
397+
398+
<span class="w"> </span><span class="c1">// 危険な例。</span>
399+
<span class="w"> </span><span class="c1">// v3の要素数はv1より少ないため、v3の範囲外にアクセスし、動作は未定義となる</span>
400+
<span class="w"> </span><span class="c1">// <a href="../iostream/cout.html">std::cout</a> &lt;&lt; <span style="color:#ff0000">std::equal</span>(<a href="../vector/vector/begin.html">v1.begin()</a>, <a href="../vector/vector/end.html">v1.end()</a>, <a href="../vector/vector/begin.html">v3.begin()</a>) &lt;&lt; <a href="../ostream/endl.html">std::endl</a>;</span>
401+
402+
<span class="w"> </span><span class="c1">// 終端を指定する(3)であれば、要素数が異なることを検出してfalseを返す</span>
403+
<span class="w"> </span><span class="n"><a href="../iostream/cout.html">std::cout</a></span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n"><span style="color:#ff0000">std::equal</span></span><span class="p">(</span><span class="n"><a href="../vector/vector/begin.html">v1.begin()</a></span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../vector/vector/end.html">v1.end()</a></span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../vector/vector/begin.html">v3.begin()</a></span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../vector/vector/end.html">v3.end()</a></span><span class="p">)</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span>
404+
<span class="p">}</span>
405+
</code></pre></div>
406+
</div></p>
407+
<h4>出力</h4>
408+
<p><pre><code>true
409+
false
410+
</code></pre></p>
371411
<h2>実装例</h2>
372412
<p><div class="codehilite"><pre><span></span><code><span class="k">template</span><span class="o">&lt;</span><span class="k">class</span><span class="w"> </span><span class="nc">InputIterator1</span><span class="p">,</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">InputIterator2</span><span class="o">&gt;</span>
373413
<span class="kt">bool</span><span class="w"> </span><span class="n">equal</span><span class="p">(</span><span class="n">InputIterator1</span><span class="w"> </span><span class="n">first1</span><span class="p">,</span><span class="w"> </span><span class="n">InputIterator1</span><span class="w"> </span><span class="n">last1</span><span class="p">,</span>

0 commit comments

Comments
 (0)