Files
hustoj/web/cppreference-zh/chmhelp/cpp-header-iterator.html
2025-08-01 12:57:54 +08:00

2385 lines
251 KiB
HTML

<!DOCTYPE html>
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>&#26631;&#20934;&#24211;&#22836;&#25991;&#20214; &lt;iterator&gt;</title>
<link rel="stylesheet" href="ext.css" />
<link rel="stylesheet" href="site_modules.css" />
</head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_header_iterator skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">&#26631;&#20934;&#24211;&#22836;&#25991;&#20214;</span> &lt;iterator&gt;</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="cpp.html">cpp</a>&lrm; | <a href="cpp-header.html">header</a></span></div>
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
<p>&#27492;&#22836;&#25991;&#20214;&#26159;<a href="cpp-iterator.html">&#36845;&#20195;&#22120;</a>&#24211;&#30340;&#19968;&#37096;&#20998;&#12290;</p>
<table class="t-dsc-begin">
<tr>
<td colspan="2">
<h3><span class="mw-headline" id=".E6.A6.82.E5.BF.B5">&#27010;&#24565;</span></h3>
</td>
</tr>
<tr>
<td colspan="2">
<h5><span class="mw-headline" id=".E8.BF.AD.E4.BB.A3.E5.99.A8.E6.A6.82.E5.BF.B5">&#36845;&#20195;&#22120;&#27010;&#24565;</span></h5>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirectly_readable.html"><span class="t-lines"><span>indirectly_readable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#31867;&#22411;&#36890;&#36807;&#24212;&#29992;&#36816;&#31639;&#31526; <code>*</code> &#21487;&#35835;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirectly_writable.html"><span class="t-lines"><span>indirectly_writable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#21487;&#21521;&#36845;&#20195;&#22120;&#25152;&#24341;&#29992;&#30340;&#23545;&#35937;&#20889;&#20837;&#20540;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-weakly_incrementable.html"><span class="t-lines"><span>weakly_incrementable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450; <a href="cpp-concepts-semiregular.html"><code>semiregular</code></a> &#31867;&#22411;&#33021;&#20197;&#21069;&#21518;&#33258;&#22686;&#36816;&#31639;&#31526;&#33258;&#22686;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-incrementable.html"><span class="t-lines"><span>incrementable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450; <a href="cpp-iterator-weakly_incrementable.html"><code>weakly_incrementable</code></a> &#31867;&#22411;&#19978;&#30340;&#33258;&#22686;&#25805;&#20316;&#20445;&#25345;&#30456;&#31561;&#24615;&#65292;&#32780;&#19988;&#35813;&#31867;&#22411;&#20026; <a href="cpp-concepts-equality_comparable.html"><code>equality_comparable</code></a><br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-input_or_output_iterator.html"><span class="t-lines"><span>input_or_output_iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#35813;&#31867;&#22411;&#23545;&#35937;&#21487;&#20197;&#33258;&#22686;&#19988;&#21487;&#20197;&#35299;&#24341;&#29992;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-sentinel_for.html"><span class="t-lines"><span>sentinel_for</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#31867;&#22411;&#20026;&#26576;&#20010; <a href="cpp-iterator-input_or_output_iterator.html"><code>input_or_output_iterator</code></a> &#31867;&#22411;&#30340;&#21736;&#20301;&#31867;&#22411;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-sized_sentinel_for.html"><span class="t-lines"><span>sized_sentinel_for</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#21487;&#23545;&#19968;&#20010;&#36845;&#20195;&#22120;&#21644;&#19968;&#20010;&#21736;&#20301;&#24212;&#29992; <code>-</code> &#36816;&#31639;&#31526;&#65292;&#20197;&#22312;&#24120;&#25968;&#26102;&#38388;&#35745;&#31639;&#20854;&#36317;&#31163;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-input_iterator.html"><span class="t-lines"><span>input_iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#31867;&#22411;&#20026;&#36755;&#20837;&#36845;&#20195;&#22120;&#65292;&#21363;&#21487;&#35835;&#21462;&#20854;&#25152;&#24341;&#29992;&#30340;&#20540;&#65292;&#19988;&#21487;&#21069;/&#21518;&#33258;&#22686;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-output_iterator.html"><span class="t-lines"><span>output_iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#31867;&#22411;&#20026;&#32473;&#23450;&#30340;&#20540;&#31867;&#22411;&#30340;&#36755;&#20986;&#36845;&#20195;&#22120;&#65292;&#21363;&#21487;&#21521;&#20854;&#20889;&#20837;&#35813;&#31867;&#22411;&#30340;&#20540;&#65292;&#19988;&#21487;&#21069;/&#21518;&#33258;&#22686;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-forward_iterator.html"><span class="t-lines"><span>forward_iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450; <a href="cpp-iterator-input_iterator.html"><code>input_iterator</code></a> &#20026;&#21521;&#21069;&#36845;&#20195;&#22120;&#65292;&#25903;&#25345;&#30456;&#31561;&#27604;&#36739;&#19982;&#22810;&#36255;&#25805;&#20316;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-bidirectional_iterator.html"><span class="t-lines"><span>bidirectional_iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450; <a href="cpp-iterator-forward_iterator.html"><code>forward_iterator</code></a> &#20026;&#21452;&#21521;&#36845;&#20195;&#22120;&#65292;&#25903;&#25345;&#21521;&#21518;&#31227;&#21160;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-random_access_iterator.html"><span class="t-lines"><span>random_access_iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450; <a href="cpp-iterator-bidirectional_iterator.html"><code>bidirectional_iterator</code></a> &#20026;&#38543;&#26426;&#35775;&#38382;&#36845;&#20195;&#22120;&#65292;&#25903;&#25345;&#24120;&#25968;&#26102;&#38388;&#20869;&#30340;&#21069;&#36827;&#21644;&#19979;&#26631;&#35775;&#38382;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-contiguous_iterator.html"><span class="t-lines"><span>contiguous_iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450; <a href="cpp-iterator-random_access_iterator.html"><code>random_access_iterator</code></a> &#20026;&#36830;&#32493;&#36845;&#20195;&#22120;&#65292;&#25351;&#20195;&#20869;&#23384;&#20013;&#36830;&#32493;&#30456;&#25509;&#30340;&#20803;&#32032;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr>
<td colspan="2">
<h5><span class="mw-headline" id=".E9.97.B4.E6.8E.A5.E5.8F.AF.E8.B0.83.E7.94.A8.E6.A6.82.E5.BF.B5">&#38388;&#25509;&#21487;&#35843;&#29992;&#27010;&#24565;</span></h5>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirectly_unary_invocable.html"><span class="t-lines"><span>indirectly_unary_invocable</span><span>indirectly_regular_unary_invocable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#21487;&#35843;&#29992;&#31867;&#22411;&#33021;&#20197;&#35299;&#24341;&#29992;&#26576;&#20010; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#30340;&#32467;&#26524;&#36827;&#34892;&#35843;&#29992;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirect_unary_predicate.html"><span class="t-lines"><span>indirect_unary_predicate</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#21487;&#35843;&#29992;&#31867;&#22411;&#65292;&#22312;&#20197;&#35299;&#24341;&#29992;&#19968;&#20010; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#30340;&#32467;&#26524;&#36827;&#34892;&#35843;&#29992;&#26102;&#65292;&#28385;&#36275; <a href="cpp-concepts-predicate.html"><code>predicate</code></a><br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirect_binary_predicate.html"><span class="t-lines"><span>indirect_binary_predicate</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#21487;&#35843;&#29992;&#31867;&#22411;&#65292;&#22312;&#20197;&#35299;&#24341;&#29992;&#20004;&#20010; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#30340;&#32467;&#26524;&#36827;&#34892;&#35843;&#29992;&#26102;&#65292;&#28385;&#36275; <a href="cpp-concepts-predicate.html"><code>predicate</code></a><br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirect_equivalence_relation.html"><span class="t-lines"><span>indirect_equivalence_relation</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#21487;&#35843;&#29992;&#31867;&#22411;&#65292;&#22312;&#20197;&#35299;&#24341;&#29992;&#20004;&#20010; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#30340;&#32467;&#26524;&#36827;&#34892;&#35843;&#29992;&#26102;&#65292;&#28385;&#36275; <a href="cpp-concepts-equivalence_relation.html"><code>equivalence_relation</code></a><br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirect_strict_weak_order.html"><span class="t-lines"><span>indirect_strict_weak_order</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#21487;&#35843;&#29992;&#31867;&#22411;&#65292;&#22312;&#20197;&#35299;&#24341;&#29992;&#20004;&#20010; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#30340;&#32467;&#26524;&#36827;&#34892;&#35843;&#29992;&#26102;&#65292;&#28385;&#36275; <a href="cpp-concepts-strict_weak_order.html"><code>strict_weak_order</code></a><br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr>
<td colspan="2">
<h5><span class="mw-headline" id=".E5.B8.B8.E7.94.A8.E7.AE.97.E6.B3.95.E8.A6.81.E6.B1.82">&#24120;&#29992;&#31639;&#27861;&#35201;&#27714;</span></h5>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirectly_movable.html"><span class="t-lines"><span>indirectly_movable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#21487;&#20174; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#31227;&#21160;&#20540;&#32473; <a href="cpp-iterator-indirectly_writable.html"><code>indirectly_writable</code></a> &#31867;&#22411;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirectly_movable_storable.html"><span class="t-lines"><span>indirectly_movable_storable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#21487;&#20174; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#31227;&#21160;&#20540;&#32473; <a href="cpp-iterator-indirectly_writable.html"><code>indirectly_writable</code></a> &#31867;&#22411;&#65292;&#19988;&#35813;&#31227;&#21160;&#21487;&#20197;&#36890;&#36807;&#20013;&#38388;&#23545;&#35937;&#36827;&#34892;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirectly_copyable.html"><span class="t-lines"><span>indirectly_copyable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#21487;&#20174; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#22797;&#21046;&#20540;&#32473; <a href="cpp-iterator-indirectly_writable.html"><code>indirectly_writable</code></a> &#31867;&#22411;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirectly_copyable_storable.html"><span class="t-lines"><span>indirectly_copyable_storable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#21487;&#20174; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#22797;&#21046;&#20540;&#32473; <a href="cpp-iterator-indirectly_writable.html"><code>indirectly_writable</code></a> &#31867;&#22411;&#65292;&#19988;&#35813;&#22797;&#21046;&#21487;&#20197;&#36890;&#36807;&#20013;&#38388;&#23545;&#35937;&#36827;&#34892;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirectly_swappable.html"><span class="t-lines"><span>indirectly_swappable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#33021;&#20132;&#25442;&#20004;&#20010; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#25152;&#24341;&#29992;&#30340;&#20540;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirectly_comparable.html"><span class="t-lines"><span>indirectly_comparable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#33021;&#27604;&#36739;&#20004;&#20010; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#25152;&#24341;&#29992;&#30340;&#20540;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-permutable.html"><span class="t-lines"><span>permutable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#22312;&#21407;&#20301;&#37325;&#25490;&#20803;&#32032;&#30340;&#31639;&#27861;&#30340;&#20849;&#21516;&#35201;&#27714;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-mergeable.html"><span class="t-lines"><span>mergeable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#36890;&#36807;&#22797;&#21046;&#20803;&#32032;&#23558;&#24050;&#25490;&#24207;&#24207;&#21015;&#24402;&#24182;&#21040;&#36755;&#20986;&#24207;&#21015;&#20013;&#30340;&#31639;&#27861;&#30340;&#35201;&#27714;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-sortable.html"><span class="t-lines"><span>sortable</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#25351;&#23450;&#37325;&#25490;&#24207;&#21015;&#20026;&#26377;&#24207;&#24207;&#21015;&#30340;&#31639;&#27861;&#30340;&#20849;&#29992;&#35201;&#27714;<br />
<span class="t-mark">(&#27010;&#24565;)</span></td>
</tr>
<tr>
<td colspan="2">
<h3><span class="mw-headline" id=".E7.B1.BB">&#31867;</span></h3>
</td>
</tr>
<tr>
<td colspan="2">
<h5><span class="mw-headline" id=".E7.AE.97.E6.B3.95.E5.B7.A5.E5.85.B7">&#31639;&#27861;&#24037;&#20855;</span></h5>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirect_result_t.html"><span class="t-lines"><span>indirect_result_t</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#35745;&#31639;&#22312;&#35299;&#24341;&#29992;&#26576;&#32452; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#30340;&#32467;&#26524;&#19978;&#35843;&#29992;&#21487;&#35843;&#29992;&#23545;&#35937;&#30340;&#32467;&#26524;<br />
<span class="t-mark">(&#21035;&#21517;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-projected.html"><span class="t-lines"><span>projected</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#29992;&#20110;&#23545;&#25509;&#21463;&#25237;&#24433;&#30340;&#31639;&#27861;&#25351;&#23450;&#32422;&#26463;&#30340;&#36741;&#21161;&#27169;&#26495;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr>
<td colspan="2">
<h5><span class="mw-headline" id=".E5.85.B3.E8.81.94.E7.B1.BB.E5.9E.8B">&#20851;&#32852;&#31867;&#22411;</span></h5>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-incrementable_traits.html"><span class="t-lines"><span>incrementable_traits</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#35745;&#31639; <a href="cpp-iterator-weakly_incrementable.html"><code>weakly_incrementable</code></a> &#31867;&#22411;&#30340;&#24046;&#31867;&#22411;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-indirectly_readable_traits.html"><span class="t-lines"><span>indirectly_readable_traits</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#35745;&#31639; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> &#31867;&#22411;&#30340;&#20540;&#31867;&#22411;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-iter_t.html"><span class="t-lines"><span>iter_value_t</span><span>iter_reference_t</span><span>iter_difference_t</span><span>iter_rvalue_reference_t</span><span>iter_common_reference_t</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#35745;&#31639;&#36845;&#20195;&#22120;&#30340;&#20851;&#32852;&#31867;&#22411;<br />
<span class="t-mark">(&#21035;&#21517;&#27169;&#26495;)</span></td>
</tr>
<tr>
<td colspan="2">
<h5><span class="mw-headline" id=".E5.8E.9F.E8.AF.AD">&#21407;&#35821;</span></h5>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-iterator_traits.html"><span class="t-lines"><span>iterator_traits</span></span></a></div>
</div>
</td>
<td>&#20026;&#36845;&#20195;&#22120;&#21508;&#39033;&#24615;&#36136;&#25552;&#20379;&#32479;&#19968;&#25509;&#21475;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-iterator_tags.html"><span class="t-lines"><span>input_iterator_tag</span><span>output_iterator_tag</span><span>forward_iterator_tag</span><span>bidirectional_iterator_tag</span><span>random_access_iterator_tag</span><span>contiguous_iterator_tag</span></span></a></div>
<div><span class="t-lines"><span></span><span></span><span></span><span></span><span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#29992;&#20110;&#25351;&#31034;&#36845;&#20195;&#22120;&#31867;&#21035;&#30340;&#31354;&#31867;&#31867;&#22411;<br />
<span class="t-mark">(&#31867;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-iterator.html"><span class="t-lines"><span>iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-deprecated-cxx17">(C++17 &#20013;&#24323;&#29992;)</span></span></span></div>
</div>
</td>
<td>&#29992;&#20110;&#31616;&#21270;&#31616;&#21333;&#30340;&#36845;&#20195;&#22120;&#30340;&#24517;&#35201;&#31867;&#22411;&#23450;&#20041;&#30340;&#22522;&#31867;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr>
<td colspan="2">
<h5><span class="mw-headline" id=".E9.80.82.E9.85.8D.E5.99.A8">&#36866;&#37197;&#22120;</span></h5>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-reverse_iterator.html"><span class="t-lines"><span>reverse_iterator</span></span></a></div>
</div>
</td>
<td>&#36870;&#24207;&#36941;&#21382;&#30340;&#36845;&#20195;&#22120;&#36866;&#37197;&#22120;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-move_iterator.html"><span class="t-lines"><span>move_iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
</div>
</td>
<td>&#35299;&#24341;&#29992;&#32467;&#26524;&#20026;&#21491;&#20540;&#24341;&#29992;&#30340;&#36845;&#20195;&#22120;&#36866;&#37197;&#22120;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-move_sentinel.html"><span class="t-lines"><span>move_sentinel</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#29992;&#20110; <span class="t-lc"><a href="cpp-iterator-move_iterator.html">std::move_iterator</a></span> &#30340;&#21736;&#20301;&#36866;&#37197;&#22120;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-common_iterator.html"><span class="t-lines"><span>common_iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#36866;&#37197;&#19968;&#20010;&#36845;&#20195;&#22120;&#31867;&#22411;&#21450;&#20854;&#21736;&#20301;&#20026;&#19968;&#20010;&#20844;&#20849;&#36845;&#20195;&#22120;&#31867;&#22411;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-default_sentinel_t.html"><span class="t-lines"><span>default_sentinel_t</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#29992;&#20110;&#30693;&#26195;&#20854;&#36793;&#30028;&#30340;&#36845;&#20195;&#22120;&#30340;&#40664;&#35748;&#21736;&#20301;<br />
<span class="t-mark">(&#31867;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-counted_iterator.html"><span class="t-lines"><span>counted_iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#23545;&#21040;&#33539;&#22260;&#32467;&#23614;&#36317;&#31163;&#36827;&#34892;&#36319;&#36394;&#30340;&#36845;&#20195;&#22120;&#36866;&#37197;&#22120;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-unreachable_sentinel_t.html"><span class="t-lines"><span>unreachable_sentinel_t</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#22987;&#32456;&#19982;&#20219;&#20309; <a href="cpp-iterator-weakly_incrementable.html"><code>weakly_incrementable</code></a> &#31867;&#22411;&#27604;&#36739;&#37117;&#19981;&#30456;&#31561;&#30340;&#21736;&#20301;<br />
<span class="t-mark">(&#31867;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-back_insert_iterator.html"><span class="t-lines"><span>back_insert_iterator</span></span></a></div>
</div>
</td>
<td>&#29992;&#20110;&#22312;&#23481;&#22120;&#23614;&#37096;&#25554;&#20837;&#30340;&#36845;&#20195;&#22120;&#36866;&#37197;&#22120;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-front_insert_iterator.html"><span class="t-lines"><span>front_insert_iterator</span></span></a></div>
</div>
</td>
<td>&#29992;&#20110;&#22312;&#23481;&#22120;&#22836;&#37096;&#25554;&#20837;&#30340;&#36845;&#20195;&#22120;&#36866;&#37197;&#22120;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-insert_iterator.html"><span class="t-lines"><span>insert_iterator</span></span></a></div>
</div>
</td>
<td>&#29992;&#20110;&#25554;&#20837;&#23481;&#22120;&#30340;&#36845;&#20195;&#22120;&#36866;&#37197;&#22120;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr>
<td colspan="2">
<h5><span class="mw-headline" id=".E6.B5.81.E8.BF.AD.E4.BB.A3.E5.99.A8">&#27969;&#36845;&#20195;&#22120;</span></h5>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-istream_iterator.html"><span class="t-lines"><span>istream_iterator</span></span></a></div>
</div>
</td>
<td>&#20174; <span class="t-lc"><a href="cpp-io-basic_istream.html">std::basic_istream</a></span> &#35835;&#21462;&#30340;&#36755;&#20837;&#36845;&#20195;&#22120;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-ostream_iterator.html"><span class="t-lines"><span>ostream_iterator</span></span></a></div>
</div>
</td>
<td>&#20889;&#20837; <span class="t-lc"><a href="cpp-io-basic_ostream.html">std::basic_ostream</a></span> &#30340;&#36755;&#20986;&#36845;&#20195;&#22120;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-istreambuf_iterator.html"><span class="t-lines"><span>istreambuf_iterator</span></span></a></div>
</div>
</td>
<td>&#20174; <span class="t-lc"><a href="cpp-io-basic_streambuf.html">std::basic_streambuf</a></span> &#35835;&#21462;&#30340;&#36755;&#20837;&#36845;&#20195;&#22120;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-ostreambuf_iterator.html"><span class="t-lines"><span>ostreambuf_iterator</span></span></a></div>
</div>
</td>
<td>&#20889;&#20837; <span class="t-lc"><a href="cpp-io-basic_streambuf.html">std::basic_streambuf</a></span> &#30340;&#36755;&#20986;&#36845;&#20195;&#22120;<br />
<span class="t-mark">(&#31867;&#27169;&#26495;)</span></td>
</tr>
<tr>
<td colspan="2">
<h3><span class="mw-headline" id=".E5.AE.9A.E5.88.B6.E7.82.B9.E5.AF.B9.E8.B1.A1">&#23450;&#21046;&#28857;&#23545;&#35937;</span></h3>
</td>
</tr>
<tr class="t-dsc-header">
<td colspan="2">
<div>&#23450;&#20041;&#20110;&#21629;&#21517;&#31354;&#38388; <code>std::ranges</code></div>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-ranges-iter_move.html"><span class="t-lines"><span>iter_move</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#23558;&#35299;&#24341;&#29992;&#36845;&#20195;&#22120;&#30340;&#32467;&#26524;&#36716;&#22411;&#20026;&#20854;&#20851;&#32852;&#30340;&#21491;&#20540;&#24341;&#29992;&#31867;&#22411;<br />
<span class="t-mark">(&#23450;&#21046;&#28857;&#23545;&#35937;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-ranges-iter_swap.html"><span class="t-lines"><span>iter_swap</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#20132;&#25442;&#20004;&#20010;&#21487;&#35299;&#24341;&#29992;&#23545;&#35937;&#25152;&#24341;&#29992;&#30340;&#20540;<br />
<span class="t-mark">(&#23450;&#21046;&#28857;&#23545;&#35937;)</span></td>
</tr>
<tr>
<td colspan="2">
<h3><span class="mw-headline" id=".E5.87.BD.E6.95.B0">&#20989;&#25968;</span></h3>
</td>
</tr>
<tr>
<td colspan="2">
<h5><span class="mw-headline" id=".E9.80.82.E9.85.8D.E5.99.A8_2">&#36866;&#37197;&#22120;</span></h5>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-make_reverse_iterator.html"><span class="t-lines"><span>make_reverse_iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div>
</div>
</td>
<td>&#21019;&#24314;&#25317;&#26377;&#20174;&#23454;&#21442;&#25512;&#20986;&#30340;&#31867;&#22411;&#30340; <span class="t-lc"><a href="cpp-iterator-reverse_iterator.html">std::reverse_iterator</a></span><br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-make_move_iterator.html"><span class="t-lines"><span>make_move_iterator</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
</div>
</td>
<td>&#21019;&#24314;&#25317;&#26377;&#20174;&#23454;&#21442;&#25512;&#20986;&#30340;&#31867;&#22411;&#30340; <span class="t-lc"><a href="cpp-iterator-move_iterator.html">std::move_iterator</a></span><br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-front_inserter.html"><span class="t-lines"><span>front_inserter</span></span></a></div>
</div>
</td>
<td>&#21019;&#24314;&#25317;&#26377;&#20174;&#23454;&#21442;&#25512;&#20986;&#30340;&#31867;&#22411;&#30340; <span class="t-lc"><a href="cpp-iterator-front_insert_iterator.html">std::front_insert_iterator</a></span><br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-back_inserter.html"><span class="t-lines"><span>back_inserter</span></span></a></div>
</div>
</td>
<td>&#21019;&#24314;&#25317;&#26377;&#20174;&#23454;&#21442;&#25512;&#20986;&#30340;&#31867;&#22411;&#30340; <span class="t-lc"><a href="cpp-iterator-back_insert_iterator.html">std::back_insert_iterator</a></span><br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-inserter.html"><span class="t-lines"><span>inserter</span></span></a></div>
</div>
</td>
<td>&#21019;&#24314;&#25317;&#26377;&#20174;&#23454;&#21442;&#25512;&#20986;&#30340;&#31867;&#22411;&#30340; <span class="t-lc"><a href="cpp-iterator-insert_iterator.html">std::insert_iterator</a></span><br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr>
<td colspan="2">
<h5><span class="mw-headline" id=".E9.9D.9E.E6.88.90.E5.91.98.E5.87.BD.E6.95.B0">&#38750;&#25104;&#21592;&#20989;&#25968;</span></h5>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-move_iterator-operator_cmp.html"><span class="t-lines"><span>operator==</span><span>operator!=</span><span>operator&lt;</span><span>operator&lt;=</span><span>operator&gt;</span><span>operator&gt;=</span><span>operator&lt;=&gt;</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span><span><span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark-rev t-until-cxx20">(C++20 &#20013;&#31227;&#38500;)</span></span><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#27604;&#36739;&#24213;&#23618;&#36845;&#20195;&#22120;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-move_iterator-operator+.html"><span class="t-lines"><span>operator+</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
</div>
</td>
<td>&#20196;&#36845;&#20195;&#22120;&#21069;&#36827;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-move_iterator-operator-.html"><span class="t-lines"><span>operator-</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
</div>
</td>
<td>&#35745;&#31639;&#20004;&#20010;&#36845;&#20195;&#22120;&#36866;&#37197;&#22120;&#38388;&#30340;&#36317;&#31163;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-reverse_iterator-operator_cmp.html"><span class="t-lines"><span>operator==</span><span>operator!=</span><span>operator&lt;</span><span>operator&lt;=</span><span>operator&gt;</span><span>operator&gt;=</span><span>operator&lt;=&gt;</span></span></a></div>
<div><span class="t-lines"><span></span><span></span><span></span><span></span><span></span><span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#27604;&#36739;&#24213;&#23618;&#36845;&#20195;&#22120;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-reverse_iterator-operator+.html"><span class="t-lines"><span>operator+</span></span></a></div>
</div>
</td>
<td>&#20196;&#36845;&#20195;&#22120;&#21069;&#36827;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-reverse_iterator-operator-.html"><span class="t-lines"><span>operator-</span></span></a></div>
</div>
</td>
<td>&#35745;&#31639;&#20004;&#20010;&#36845;&#20195;&#22120;&#36866;&#37197;&#22120;&#38388;&#30340;&#36317;&#31163;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-istream_iterator-operator_cmp.html"><span class="t-lines"><span>operator==</span><span>operator!=</span></span></a></div>
<div><span class="t-lines"><span></span><span><span class="t-mark-rev t-until-cxx20">(C++20 &#20013;&#31227;&#38500;)</span></span></span></div>
</div>
</td>
<td>&#27604;&#36739;&#20004;&#20010; <code>istream_iterator</code><br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-istreambuf_iterator-operator_cmp.html"><span class="t-lines"><span>operator==</span><span>operator!=</span></span></a></div>
<div><span class="t-lines"><span></span><span><span class="t-mark-rev t-until-cxx20">(C++20 &#20013;&#31227;&#38500;)</span></span></span></div>
</div>
</td>
<td>&#27604;&#36739;&#20004;&#20010; <code>istreambuf_iterator</code><br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr>
<td colspan="2">
<h5><span class="mw-headline" id=".E6.93.8D.E4.BD.9C">&#25805;&#20316;</span></h5>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-advance.html"><span class="t-lines"><span>advance</span></span></a></div>
</div>
</td>
<td>&#20196;&#36845;&#20195;&#22120;&#21069;&#36827;&#32473;&#23450;&#30340;&#36317;&#31163;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-distance.html"><span class="t-lines"><span>distance</span></span></a></div>
</div>
</td>
<td>&#36820;&#22238;&#20004;&#20010;&#36845;&#20195;&#22120;&#38388;&#30340;&#36317;&#31163;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-next.html"><span class="t-lines"><span>next</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
</div>
</td>
<td>&#20196;&#36845;&#20195;&#22120;&#33258;&#22686;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-prev.html"><span class="t-lines"><span>prev</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
</div>
</td>
<td>&#20196;&#36845;&#20195;&#22120;&#33258;&#20943;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-ranges-advance.html"><span class="t-lines"><span>ranges::advance</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#20196;&#36845;&#20195;&#22120;&#21069;&#36827;&#32473;&#23450;&#30340;&#36317;&#31163;&#25110;&#21040;&#32473;&#23450;&#30340;&#36793;&#30028;<br />
<span class="t-mark">(niebloid)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-ranges-distance.html"><span class="t-lines"><span>ranges::distance</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#36820;&#22238;&#36845;&#20195;&#22120;&#19982;&#21736;&#20301;&#38388;&#30340;&#36317;&#31163;&#65292;&#25110;&#33539;&#22260;&#36215;&#22987;&#19982;&#32467;&#23614;&#38388;&#30340;&#36317;&#31163;<br />
<span class="t-mark">(niebloid)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-ranges-next.html"><span class="t-lines"><span>ranges::next</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#33258;&#22686;&#36845;&#20195;&#22120;&#32473;&#23450;&#30340;&#36317;&#31163;&#25110;&#21040;&#36793;&#30028;<br />
<span class="t-mark">(niebloid)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-ranges-prev.html"><span class="t-lines"><span>ranges::prev</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#33258;&#20943;&#36845;&#20195;&#22120;&#32473;&#23450;&#30340;&#36317;&#31163;&#25110;&#21040;&#36793;&#30028;<br />
<span class="t-mark">(niebloid)</span></td>
</tr>
<tr>
<td colspan="2">
<h5><span class="mw-headline" id=".E8.8C.83.E5.9B.B4.E8.AE.BF.E9.97.AE">&#33539;&#22260;&#35775;&#38382;</span></h5>
</td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-begin.html"><span class="t-lines"><span>begin</span><span>cbegin</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div>
</div>
</td>
<td>&#36820;&#22238;&#25351;&#21521;&#23481;&#22120;&#25110;&#25968;&#32452;&#36215;&#22987;&#30340;&#36845;&#20195;&#22120;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-end.html"><span class="t-lines"><span>end</span><span>cend</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div>
</div>
</td>
<td>&#36820;&#22238;&#25351;&#21521;&#23481;&#22120;&#25110;&#25968;&#32452;&#32467;&#23614;&#30340;&#36845;&#20195;&#22120;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-rbegin.html"><span class="t-lines"><span>rbegin</span><span>crbegin</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div>
</div>
</td>
<td>&#36820;&#22238;&#25351;&#21521;&#19968;&#20010;&#23481;&#22120;&#25110;&#25968;&#32452;&#30340;&#36870;&#21521;&#36845;&#20195;&#22120;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-rend.html"><span class="t-lines"><span>rend</span><span>crend</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx14">(C++14)</span></span></span></div>
</div>
</td>
<td>&#36820;&#22238;&#23481;&#22120;&#25110;&#25968;&#32452;&#30340;&#36870;&#21521;&#23614;&#36845;&#20195;&#22120;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-size.html"><span class="t-lines"><span>size</span><span>ssize</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
</div>
</td>
<td>&#36820;&#22238;&#23481;&#22120;&#25110;&#25968;&#32452;&#30340;&#22823;&#23567;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-empty.html"><span class="t-lines"><span>empty</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
</div>
</td>
<td>&#26816;&#26597;&#23481;&#22120;&#26159;&#21542;&#20026;&#31354;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-iterator-data.html"><span class="t-lines"><span>data</span></span></a></div>
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx17">(C++17)</span></span></span></div>
</div>
</td>
<td>&#33719;&#24471;&#25351;&#21521;&#24213;&#23618;&#25968;&#32452;&#30340;&#25351;&#38024;<br />
<span class="t-mark">(&#20989;&#25968;&#27169;&#26495;)</span></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E6.A6.82.E8.A6.81">&#27010;&#35201;</span></h3>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co2">#include &lt;concepts&gt;</span>
<span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span> <span class="kw1">using</span> __with_reference <span class="sy1">=</span> T<span class="sy3">&amp;</span><span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span> concept __Referenceable <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="sy1">=</span> requires <span class="br0">{</span> <span class="kw1">typename</span> __with_reference<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span> concept __Dereferenceable <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="sy1">=</span> requires<span class="br0">(</span>T<span class="sy3">&amp;</span> t<span class="br0">)</span> <span class="br0">{</span>
<span class="br0">{</span> <span class="sy2">*</span>t <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> __Referenceable<span class="sy4">;</span> <span class="co1">// &#19981;&#35201;&#27714;&#20445;&#25345;&#30456;&#31561;&#24615;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="co1">// &#20851;&#32852;&#31867;&#22411;</span>
<span class="co1">// &#21487;&#33258;&#22686;&#29305;&#24449;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span><span class="sy1">&gt;</span> <span class="kw1">struct</span> incrementable_traits<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw1">using</span> iter_difference_t <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#38388;&#25509;&#21487;&#35835;&#29305;&#24449;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span><span class="sy1">&gt;</span> <span class="kw1">struct</span> indirectly_readable_traits<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw1">using</span> iter_value_t <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#36845;&#20195;&#22120;&#29305;&#24449;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span> <span class="kw1">struct</span> iterator_traits<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span> requires is_object_v<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span> <span class="kw1">struct</span> iterator_traits<span class="sy1">&lt;</span>T<span class="sy2">*</span><span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>__Dereferenceable T<span class="sy1">&gt;</span>
<span class="kw1">using</span> iter_reference_t <span class="sy1">=</span> decltype<span class="br0">(</span><span class="sy2">*</span>declval<span class="sy1">&lt;</span>T<span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
<span class="co1">// &#23450;&#21046;&#28857;</span>
<span class="kw1">inline</span> <span class="kw1">namespace</span> <span class="coMULTI">/* &#26410;&#25351;&#26126; */</span> <span class="br0">{</span>
<span class="co1">// ranges&#8203;::&#8203;iter_move</span>
<span class="kw1">inline</span> <span class="kw4">constexpr</span> <span class="coMULTI">/* &#26410;&#25351;&#26126; */</span> iter_move <span class="sy1">=</span> <span class="coMULTI">/* &#26410;&#25351;&#26126; */</span><span class="sy4">;</span>
<span class="co1">// ranges&#8203;::&#8203;iter_swap</span>
<span class="kw1">inline</span> <span class="kw4">constexpr</span> <span class="coMULTI">/* &#26410;&#25351;&#26126; */</span> iter_swap <span class="sy1">=</span> <span class="coMULTI">/* &#26410;&#25351;&#26126; */</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="br0">}</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>__Dereferenceable T<span class="sy1">&gt;</span>
requires requires<span class="br0">(</span>T<span class="sy3">&amp;</span> t<span class="br0">)</span> <span class="br0">{</span>
<span class="br0">{</span> ranges<span class="sy4">::</span><span class="me2">iter_move</span><span class="br0">(</span>t<span class="br0">)</span> <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> __Referenceable<span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw1">using</span> iter_rvalue_reference_t
<span class="sy1">=</span> decltype<span class="br0">(</span>ranges<span class="sy4">::</span><span class="me2">iter_move</span><span class="br0">(</span>declval<span class="sy1">&lt;</span>T<span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#36845;&#20195;&#22120;&#27010;&#24565;</span>
<span class="co1">// &#27010;&#24565; indirectly_readable</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> In<span class="sy1">&gt;</span>
concept indirectly_readable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>indirectly_readable T<span class="sy1">&gt;</span>
<span class="kw1">using</span> iter_common_reference_t <span class="sy1">=</span>
common_reference_t<span class="sy1">&lt;</span>iter_reference_t<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span>, iter_value_t<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; indirectly_writable</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Out, <span class="kw1">class</span> T<span class="sy1">&gt;</span>
concept indirectly_writable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; weakly_incrementable</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept weakly_incrementable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; incrementable</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept incrementable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; input_or_output_iterator</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept input_or_output_iterator <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; sentinel_for</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> S, <span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept sentinel_for <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; sized_sentinel_for</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> S, <span class="kw1">class</span> I<span class="sy1">&gt;</span>
<span class="kw1">inline</span> <span class="kw4">constexpr</span> <span class="kw4">bool</span> disable_sized_sentinel <span class="sy1">=</span> <span class="kw2">false</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> S, <span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept sized_sentinel_for <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; input_iterator</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept input_iterator <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; output_iterator</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I, <span class="kw1">class</span> T<span class="sy1">&gt;</span>
concept output_iterator <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; forward_iterator</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept forward_iterator <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; bidirectional_iterator</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept bidirectional_iterator <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; random_access_iterator</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept random_access_iterator <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; contiguous_iterator</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept contiguous_iterator <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#38388;&#25509;&#21487;&#35843;&#29992;&#35201;&#27714;</span>
<span class="co1">// &#38388;&#25509;&#21487;&#35843;&#29992;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept indirectly_unary_invocable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept indirectly_regular_unary_invocable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept indirect_unary_predicate <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span> I1, <span class="kw1">class</span> I2<span class="sy1">&gt;</span>
concept indirect_binary_predicate <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span> I1, <span class="kw1">class</span> I2 <span class="sy1">=</span> I1<span class="sy1">&gt;</span>
concept indirect_equivalence_relation <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span> I1, <span class="kw1">class</span> I2 <span class="sy1">=</span> I1<span class="sy1">&gt;</span>
concept indirect_strict_weak_order <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span>... <span class="me1">Is</span><span class="sy1">&gt;</span>
requires <span class="br0">(</span>indirectly_readable<span class="sy1">&lt;</span>Is<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span> ...<span class="br0">)</span> <span class="sy3">&amp;&amp;</span> invocable<span class="sy1">&lt;</span>F, iter_reference_t<span class="sy1">&lt;</span>Is<span class="sy1">&gt;</span>...<span class="sy1">&gt;</span>
<span class="kw1">using</span> indirect_result_t <span class="sy1">=</span> invoke_result_t<span class="sy1">&lt;</span>F, iter_reference_t<span class="sy1">&lt;</span>Is<span class="sy1">&gt;</span>...<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="co1">// projected</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>indirectly_readable I, indirectly_regular_unary_invocable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> Proj<span class="sy1">&gt;</span>
<span class="kw1">struct</span> projected<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>weakly_incrementable I, <span class="kw1">class</span> Proj<span class="sy1">&gt;</span>
<span class="kw1">struct</span> incrementable_traits<span class="sy1">&lt;</span>projected<span class="sy1">&lt;</span>I, Proj<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="co1">// &#24120;&#29992;&#31639;&#27861;&#35201;&#27714;</span>
<span class="co1">// &#27010;&#24565; indirectly_movable</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">&gt;</span>
concept indirectly_movable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">&gt;</span>
concept indirectly_movable_storable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; indirectly_copyable</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">&gt;</span>
concept indirectly_copyable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">&gt;</span>
concept indirectly_copyable_storable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; indirectly_swappable</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2 <span class="sy1">=</span> I1<span class="sy1">&gt;</span>
concept indirectly_swappable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; indirectly_comparable</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2, <span class="kw1">class</span> R, <span class="kw1">class</span> P1 <span class="sy1">=</span> identity, <span class="kw1">class</span> P2 <span class="sy1">=</span> identity<span class="sy1">&gt;</span>
concept indirectly_comparable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; permutable</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept permutable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; mergeable</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2, <span class="kw1">class</span> Out,
<span class="kw1">class</span> R <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> P1 <span class="sy1">=</span> identity, <span class="kw1">class</span> P2 <span class="sy1">=</span> identity<span class="sy1">&gt;</span>
concept mergeable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#27010;&#24565; sortable</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I, <span class="kw1">class</span> R <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> P <span class="sy1">=</span> identity<span class="sy1">&gt;</span>
concept sortable <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="co1">// &#21407;&#35821;</span>
<span class="co1">// &#36845;&#20195;&#22120;&#26631;&#31614;</span>
<span class="kw1">struct</span> input_iterator_tag <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> output_iterator_tag <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> forward_iterator_tag<span class="sy4">:</span> <span class="kw1">public</span> input_iterator_tag <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> bidirectional_iterator_tag<span class="sy4">:</span> <span class="kw1">public</span> forward_iterator_tag <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> random_access_iterator_tag<span class="sy4">:</span> <span class="kw1">public</span> bidirectional_iterator_tag <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> contiguous_iterator_tag<span class="sy4">:</span> <span class="kw1">public</span> random_access_iterator_tag <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="co1">// &#36845;&#20195;&#22120;&#25805;&#20316;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> Distance<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">void</span>
advance<span class="br0">(</span>InputIter<span class="sy3">&amp;</span> i, Distance n<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> InputIter<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw1">typename</span> iterator_traits<span class="sy1">&lt;</span>InputIter<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">difference_type</span>
distance<span class="br0">(</span>InputIter first, InputIter last<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> InputIter<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> InputIter
next<span class="br0">(</span>InputIter x, <span class="kw1">typename</span> iterator_traits<span class="sy1">&lt;</span>InputIter<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">difference_type</span> n <span class="sy1">=</span> <span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> BidirectionalIter<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> BidirectionalIter
prev<span class="br0">(</span>BidirectionalIter x,
<span class="kw1">typename</span> iterator_traits<span class="sy1">&lt;</span>BidirectionalIter<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">difference_type</span> n <span class="sy1">=</span> <span class="nu0">1</span><span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#33539;&#22260;&#36845;&#20195;&#22120;&#25805;&#20316;</span>
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
<span class="co1">// ranges&#8203;::&#8203;advance</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_or_output_iterator I<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">void</span> advance<span class="br0">(</span>I<span class="sy3">&amp;</span> i, iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_or_output_iterator I, sentinel_for<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> S<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">void</span> advance<span class="br0">(</span>I<span class="sy3">&amp;</span> i, S bound<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_or_output_iterator I, sentinel_for<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> S<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> advance<span class="br0">(</span>I<span class="sy3">&amp;</span> i, iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n, S bound<span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// ranges&#8203;::&#8203;distance</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_or_output_iterator I, sentinel_for<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> S<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> distance<span class="br0">(</span>I first, S last<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>range R<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> range_difference_t<span class="sy1">&lt;</span>R<span class="sy1">&gt;</span> distance<span class="br0">(</span>R<span class="sy3">&amp;&amp;</span> r<span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// ranges&#8203;::&#8203;next</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_or_output_iterator I<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> I next<span class="br0">(</span>I x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_or_output_iterator I<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> I next<span class="br0">(</span>I x, iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_or_output_iterator I, sentinel_for<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> S<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> I next<span class="br0">(</span>I x, S bound<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_or_output_iterator I, sentinel_for<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> S<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> I next<span class="br0">(</span>I x, iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n, S bound<span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// ranges&#8203;::&#8203;prev</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>bidirectional_iterator I<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> I prev<span class="br0">(</span>I x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>bidirectional_iterator I<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> I prev<span class="br0">(</span>I x, iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>bidirectional_iterator I<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> I prev<span class="br0">(</span>I x, iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n, I bound<span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="co1">// &#39044;&#23450;&#20041;&#36845;&#20195;&#22120;&#19982;&#21736;&#20301;</span>
<span class="co1">// &#36870;&#21521;&#36845;&#20195;&#22120;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter<span class="sy1">&gt;</span> <span class="kw1">class</span> reverse_iterator<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span>
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x,
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy3">!</span><span class="sy1">=</span><span class="br0">(</span>
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x,
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">&lt;</span><span class="br0">(</span>
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x,
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">&gt;</span><span class="br0">(</span>
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x,
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">&lt;=</span><span class="br0">(</span>
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x,
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">&gt;=</span><span class="br0">(</span>
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x,
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, three_way_comparable_with<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> compare_three_way_result_t<span class="sy1">&lt;</span>Iter1, Iter2<span class="sy1">&gt;</span>
operator<span class="sy1">&lt;=&gt;</span><span class="br0">(</span><span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x, <span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">auto</span> operator<span class="sy2">-</span><span class="br0">(</span>
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x,
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>y.<span class="me1">base</span><span class="br0">(</span><span class="br0">)</span> <span class="sy2">-</span> x.<span class="me1">base</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> reverse_iterator<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span>
operator<span class="sy2">+</span><span class="br0">(</span>
<span class="kw1">typename</span> reverse_iterator<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">difference_type</span> n,
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> reverse_iterator<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span> make_reverse_iterator<span class="br0">(</span>Iter i<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
requires <span class="br0">(</span><span class="sy3">!</span>sized_sentinel_for<span class="sy1">&lt;</span>Iter1, Iter2<span class="sy1">&gt;</span><span class="br0">)</span>
<span class="kw1">inline</span> <span class="kw4">constexpr</span> <span class="kw4">bool</span> disable_sized_sentinel<span class="sy1">&lt;</span>reverse_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span>,
reverse_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;&gt;</span> <span class="sy1">=</span> <span class="kw2">true</span><span class="sy4">;</span>
<span class="co1">// &#25554;&#20837;&#36845;&#20195;&#22120;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Container<span class="sy1">&gt;</span> <span class="kw1">class</span> back_insert_iterator<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Container<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> back_insert_iterator<span class="sy1">&lt;</span>Container<span class="sy1">&gt;</span> back_inserter<span class="br0">(</span>Container<span class="sy3">&amp;</span> x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Container<span class="sy1">&gt;</span> <span class="kw1">class</span> front_insert_iterator<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Container<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> front_insert_iterator<span class="sy1">&lt;</span>Container<span class="sy1">&gt;</span> front_inserter<span class="br0">(</span>Container<span class="sy3">&amp;</span> x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Container<span class="sy1">&gt;</span> <span class="kw1">class</span> insert_iterator<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Container<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> insert_iterator<span class="sy1">&lt;</span>Container<span class="sy1">&gt;</span>
inserter<span class="br0">(</span>Container<span class="sy3">&amp;</span> x, ranges<span class="sy4">::</span><span class="me2">iterator_t</span><span class="sy1">&lt;</span>Container<span class="sy1">&gt;</span> i<span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#31227;&#21160;&#36845;&#20195;&#22120;&#19982;&#21736;&#20301;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter<span class="sy1">&gt;</span> <span class="kw1">class</span> move_iterator<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span>
<span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x, <span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">&lt;</span><span class="br0">(</span>
<span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x, <span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">&gt;</span><span class="br0">(</span>
<span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x, <span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">&lt;=</span><span class="br0">(</span>
<span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x, <span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">&gt;=</span><span class="br0">(</span>
<span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x, <span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, three_way_comparable_with<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> compare_three_way_result_t<span class="sy1">&lt;</span>Iter1, Iter2<span class="sy1">&gt;</span>
operator<span class="sy1">&lt;=&gt;</span><span class="br0">(</span><span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x, <span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> <span class="kw4">auto</span> operator<span class="sy2">-</span><span class="br0">(</span>
<span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter1<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x,
<span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>x.<span class="me1">base</span><span class="br0">(</span><span class="br0">)</span> <span class="sy2">-</span> y.<span class="me1">base</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> move_iterator<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span> operator<span class="sy2">+</span><span class="br0">(</span>
<span class="kw1">typename</span> move_iterator<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">difference_type</span> n, <span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> move_iterator<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span> make_move_iterator<span class="br0">(</span>Iter i<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>semiregular S<span class="sy1">&gt;</span> <span class="kw1">class</span> move_sentinel<span class="sy4">;</span>
<span class="co1">// &#20844;&#20849;&#36845;&#20195;&#22120;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_or_output_iterator I, sentinel_for<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> S<span class="sy1">&gt;</span>
requires <span class="br0">(</span><span class="sy3">!</span>same_as<span class="sy1">&lt;</span>I, S<span class="sy1">&gt;</span><span class="br0">)</span>
<span class="kw1">class</span> common_iterator<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I, <span class="kw1">class</span> S<span class="sy1">&gt;</span>
<span class="kw1">struct</span> incrementable_traits<span class="sy1">&lt;</span>common_iterator<span class="sy1">&lt;</span>I, S<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_iterator I, <span class="kw1">class</span> S<span class="sy1">&gt;</span>
<span class="kw1">struct</span> iterator_traits<span class="sy1">&lt;</span>common_iterator<span class="sy1">&lt;</span>I, S<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="co1">// &#40664;&#35748;&#21736;&#20301;</span>
<span class="kw1">struct</span> default_sentinel_t<span class="sy4">;</span>
<span class="kw1">inline</span> <span class="kw4">constexpr</span> default_sentinel_t default_sentinel<span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="co1">// &#35745;&#25968;&#36845;&#20195;&#22120;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_or_output_iterator I<span class="sy1">&gt;</span> <span class="kw1">class</span> counted_iterator<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
<span class="kw1">struct</span> incrementable_traits<span class="sy1">&lt;</span>counted_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_iterator I<span class="sy1">&gt;</span>
<span class="kw1">struct</span> iterator_traits<span class="sy1">&lt;</span>counted_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="co1">// &#19981;&#21487;&#36798;&#21736;&#20301;</span>
<span class="kw1">struct</span> unreachable_sentinel_t<span class="sy4">;</span>
<span class="kw1">inline</span> <span class="kw4">constexpr</span> unreachable_sentinel_t unreachable_sentinel<span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="co1">// &#27969;&#36845;&#20195;&#22120;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, <span class="kw1">class</span> charT <span class="sy1">=</span> <span class="kw4">char</span>, <span class="kw1">class</span> traits <span class="sy1">=</span> char_traits<span class="sy1">&lt;</span>charT<span class="sy1">&gt;</span>,
<span class="kw1">class</span> Distance <span class="sy1">=</span> ptrdiff_t<span class="sy1">&gt;</span>
<span class="kw1">class</span> istream_iterator<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, <span class="kw1">class</span> charT, <span class="kw1">class</span> traits, <span class="kw1">class</span> Distance<span class="sy1">&gt;</span>
<span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span><span class="kw4">const</span> istream_iterator<span class="sy1">&lt;</span>T,charT,traits,Distance<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x,
<span class="kw4">const</span> istream_iterator<span class="sy1">&lt;</span>T,charT,traits,Distance<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, <span class="kw1">class</span> charT <span class="sy1">=</span> <span class="kw4">char</span>, <span class="kw1">class</span> traits <span class="sy1">=</span> char_traits<span class="sy1">&lt;</span>charT<span class="sy1">&gt;&gt;</span>
<span class="kw1">class</span> ostream_iterator<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> charT, <span class="kw1">class</span> traits <span class="sy1">=</span> char_traits<span class="sy1">&lt;</span>charT<span class="sy1">&gt;&gt;</span>
<span class="kw1">class</span> istreambuf_iterator<span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> charT, <span class="kw1">class</span> traits<span class="sy1">&gt;</span>
<span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span><span class="kw4">const</span> istreambuf_iterator<span class="sy1">&lt;</span>charT,traits<span class="sy1">&gt;</span><span class="sy3">&amp;</span> a,
<span class="kw4">const</span> istreambuf_iterator<span class="sy1">&lt;</span>charT,traits<span class="sy1">&gt;</span><span class="sy3">&amp;</span> b<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> charT, <span class="kw1">class</span> traits <span class="sy1">=</span> char_traits<span class="sy1">&lt;</span>charT<span class="sy1">&gt;&gt;</span>
<span class="kw1">class</span> ostreambuf_iterator<span class="sy4">;</span>
<span class="co1">// &#33539;&#22260;&#35775;&#38382;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> begin<span class="br0">(</span>C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>c.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> begin<span class="br0">(</span><span class="kw4">const</span> C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>c.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> end<span class="br0">(</span>C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>c.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> end<span class="br0">(</span><span class="kw4">const</span> C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>c.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, size_t N<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> T<span class="sy2">*</span> begin<span class="br0">(</span>T <span class="br0">(</span><span class="sy3">&amp;</span>a<span class="br0">)</span><span class="br0">[</span>N<span class="br0">]</span><span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, size_t N<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> T<span class="sy2">*</span> end<span class="br0">(</span>T <span class="br0">(</span><span class="sy3">&amp;</span>a<span class="br0">)</span><span class="br0">[</span>N<span class="br0">]</span><span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> cbegin<span class="br0">(</span><span class="kw4">const</span> C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="kw1">noexcept</span><span class="br0">(</span><span class="kw1">noexcept</span><span class="br0">(</span><a href="cpp-iterator-begin.html"><span class="kw676">std::<span class="me2">begin</span></span></a><span class="br0">(</span>c<span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>
<span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span><a href="cpp-iterator-begin.html"><span class="kw676">std::<span class="me2">begin</span></span></a><span class="br0">(</span>c<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> cend<span class="br0">(</span><span class="kw4">const</span> C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="kw1">noexcept</span><span class="br0">(</span><span class="kw1">noexcept</span><span class="br0">(</span><a href="cpp-iterator-end.html"><span class="kw680">std::<span class="me2">end</span></span></a><span class="br0">(</span>c<span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>
<span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span><a href="cpp-iterator-end.html"><span class="kw680">std::<span class="me2">end</span></span></a><span class="br0">(</span>c<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> rbegin<span class="br0">(</span>C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>c.<span class="me1">rbegin</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> rbegin<span class="br0">(</span><span class="kw4">const</span> C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>c.<span class="me1">rbegin</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> rend<span class="br0">(</span>C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>c.<span class="me1">rend</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> rend<span class="br0">(</span><span class="kw4">const</span> C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>c.<span class="me1">rend</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, size_t N<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> reverse_iterator<span class="sy1">&lt;</span>T<span class="sy2">*</span><span class="sy1">&gt;</span> rbegin<span class="br0">(</span>T <span class="br0">(</span><span class="sy3">&amp;</span>a<span class="br0">)</span><span class="br0">[</span>N<span class="br0">]</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, size_t N<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> reverse_iterator<span class="sy1">&lt;</span>T<span class="sy2">*</span><span class="sy1">&gt;</span> rend<span class="br0">(</span>T <span class="br0">(</span><span class="sy3">&amp;</span>a<span class="br0">)</span><span class="br0">[</span>N<span class="br0">]</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> E<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> reverse_iterator<span class="sy1">&lt;</span><span class="kw4">const</span> E<span class="sy2">*</span><span class="sy1">&gt;</span> rbegin<span class="br0">(</span>initializer_list<span class="sy1">&lt;</span>E<span class="sy1">&gt;</span> il<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> E<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> reverse_iterator<span class="sy1">&lt;</span><span class="kw4">const</span> E<span class="sy2">*</span><span class="sy1">&gt;</span> rend<span class="br0">(</span>initializer_list<span class="sy1">&lt;</span>E<span class="sy1">&gt;</span> il<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> crbegin<span class="br0">(</span><span class="kw4">const</span> C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span><a href="cpp-iterator-rbegin.html"><span class="kw678">std::<span class="me2">rbegin</span></span></a><span class="br0">(</span>c<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> crend<span class="br0">(</span><span class="kw4">const</span> C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span><a href="cpp-iterator-rend.html"><span class="kw682">std::<span class="me2">rend</span></span></a><span class="br0">(</span>c<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> size<span class="br0">(</span><span class="kw4">const</span> C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>c.<span class="me1">size</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, size_t N<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> size_t size<span class="br0">(</span><span class="kw4">const</span> T <span class="br0">(</span><span class="sy3">&amp;</span>a<span class="br0">)</span><span class="br0">[</span>N<span class="br0">]</span><span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> ssize<span class="br0">(</span><span class="kw4">const</span> C<span class="sy3">&amp;</span> c<span class="br0">)</span>
<span class="sy2">-</span><span class="sy1">&gt;</span> common_type_t<span class="sy1">&lt;</span>ptrdiff_t, make_signed_t<span class="sy1">&lt;</span>decltype<span class="br0">(</span>c.<span class="me1">size</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, ptrdiff_t N<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> ptrdiff_t ssize<span class="br0">(</span><span class="kw4">const</span> T <span class="br0">(</span><span class="sy3">&amp;</span>a<span class="br0">)</span><span class="br0">[</span>N<span class="br0">]</span><span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="br0">[</span><span class="br0">[</span>nodiscard<span class="br0">]</span><span class="br0">]</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> empty<span class="br0">(</span><span class="kw4">const</span> C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>c.<span class="me1">empty</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, size_t N<span class="sy1">&gt;</span> <span class="br0">[</span><span class="br0">[</span>nodiscard<span class="br0">]</span><span class="br0">]</span> <span class="kw4">constexpr</span> <span class="kw4">bool</span> empty<span class="br0">(</span><span class="kw4">const</span> T <span class="br0">(</span><span class="sy3">&amp;</span>a<span class="br0">)</span><span class="br0">[</span>N<span class="br0">]</span><span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> E<span class="sy1">&gt;</span> <span class="br0">[</span><span class="br0">[</span>nodiscard<span class="br0">]</span><span class="br0">]</span> <span class="kw4">constexpr</span> <span class="kw4">bool</span> empty<span class="br0">(</span>initializer_list<span class="sy1">&lt;</span>E<span class="sy1">&gt;</span> il<span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> data<span class="br0">(</span>C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>c.<span class="me1">data</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> C<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> data<span class="br0">(</span><span class="kw4">const</span> C<span class="sy3">&amp;</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> decltype<span class="br0">(</span>c.<span class="me1">data</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, size_t N<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> T<span class="sy2">*</span> data<span class="br0">(</span>T <span class="br0">(</span><span class="sy3">&amp;</span>a<span class="br0">)</span><span class="br0">[</span>N<span class="br0">]</span><span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> E<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> <span class="kw4">const</span> E<span class="sy2">*</span> data<span class="br0">(</span>initializer_list<span class="sy1">&lt;</span>E<span class="sy1">&gt;</span> il<span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirectly_readable">&#27010;&#24565; <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> In<span class="sy1">&gt;</span>
concept __IndirectlyReadableImpl <span class="sy1">=</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
requires<span class="br0">(</span><span class="kw4">const</span> In in<span class="br0">)</span> <span class="br0">{</span>
<span class="kw1">typename</span> iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">typename</span> iter_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">typename</span> iter_rvalue_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">{</span> <span class="sy2">*</span>in <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>iter_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;&gt;</span>
<span class="br0">{</span> iter_move<span class="br0">(</span>in<span class="br0">)</span> <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>iter_rvalue_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;&gt;</span>
<span class="br0">}</span> <span class="sy3">&amp;&amp;</span>
common_reference_with<span class="sy1">&lt;</span>iter_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy3">&amp;&amp;</span>, iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
common_reference_with<span class="sy1">&lt;</span>iter_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy3">&amp;&amp;</span>, iter_rvalue_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy3">&amp;&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
common_reference_with<span class="sy1">&lt;</span>iter_rvalue_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy3">&amp;&amp;</span>, <span class="kw4">const</span> iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> In<span class="sy1">&gt;</span>
concept indirectly_readable <span class="sy1">=</span>
__IndirectlyReadableImpl<span class="sy1">&lt;</span>remove_cvref_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;&gt;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirectly_writable">&#27010;&#24565; <a href="cpp-iterator-indirectly_writable.html"><code>indirectly_writable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Out, <span class="kw1">class</span> T<span class="sy1">&gt;</span>
concept indirectly_writable <span class="sy1">=</span>
requires<span class="br0">(</span>Out<span class="sy3">&amp;&amp;</span> o, T<span class="sy3">&amp;&amp;</span> t<span class="br0">)</span> <span class="br0">{</span>
<span class="sy2">*</span>o <span class="sy1">=</span> <a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="br0">(</span>t<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#19981;&#35201;&#27714;&#20445;&#25345;&#30456;&#31561;&#24615;</span>
<span class="sy2">*</span><a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1">&lt;</span>Out<span class="sy1">&gt;</span><span class="br0">(</span>o<span class="br0">)</span> <span class="sy1">=</span> <a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="br0">(</span>t<span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#19981;&#35201;&#27714;&#20445;&#25345;&#30456;&#31561;&#24615;</span>
<span class="kw1">const_cast</span><span class="sy1">&lt;</span><span class="kw4">const</span> iter_reference_t<span class="sy1">&lt;</span>Out<span class="sy1">&gt;</span><span class="sy3">&amp;&amp;</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy2">*</span>o<span class="br0">)</span> <span class="sy1">=</span>
<a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="br0">(</span>t<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#19981;&#35201;&#27714;&#20445;&#25345;&#30456;&#31561;&#24615;</span>
<span class="kw1">const_cast</span><span class="sy1">&lt;</span><span class="kw4">const</span> iter_reference_t<span class="sy1">&lt;</span>Out<span class="sy1">&gt;</span><span class="sy3">&amp;&amp;</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy2">*</span><a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1">&lt;</span>Out<span class="sy1">&gt;</span><span class="br0">(</span>o<span class="br0">)</span><span class="br0">)</span> <span class="sy1">=</span>
<a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="br0">(</span>t<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#19981;&#35201;&#27714;&#20445;&#25345;&#30456;&#31561;&#24615;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_weakly_incrementable">&#27010;&#24565; <a href="cpp-iterator-weakly_incrementable.html"><code>weakly_incrementable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw1">inline</span> <span class="kw4">constexpr</span> <span class="kw4">bool</span> __is_integer_like <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw1">inline</span> <span class="kw4">constexpr</span> <span class="kw4">bool</span> __is_signed_integer_like <span class="sy1">=</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept weakly_incrementable <span class="sy1">=</span>
default_initializable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span> movable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
requires<span class="br0">(</span>I i<span class="br0">)</span> <span class="br0">{</span>
<span class="kw1">typename</span> iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
requires __is_signed_integer_like<span class="sy1">&lt;</span>iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">{</span> <span class="sy2">++</span>i <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>I<span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="sy4">;</span> <span class="co1">// &#19981;&#35201;&#27714;&#20445;&#25345;&#30456;&#31561;&#24615;</span>
i<span class="sy2">++</span><span class="sy4">;</span> <span class="co1">// &#19981;&#35201;&#27714;&#20445;&#25345;&#30456;&#31561;&#24615;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_incrementable">&#27010;&#24565; <a href="cpp-iterator-incrementable.html"><code>incrementable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept incrementable <span class="sy1">=</span>
regular<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
weakly_incrementable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
requires<span class="br0">(</span>I i<span class="br0">)</span> <span class="br0">{</span>
<span class="br0">{</span> i<span class="sy2">++</span> <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_input_or_output_iterator">&#27010;&#24565; <a href="cpp-iterator-input_or_output_iterator.html"><code>input_or_output_iterator</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept input_or_output_iterator <span class="sy1">=</span>
requires<span class="br0">(</span>I i<span class="br0">)</span> <span class="br0">{</span>
<span class="br0">{</span> <span class="sy2">*</span>i <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> can<span class="sy2">-</span>reference<span class="sy4">;</span>
<span class="br0">}</span> <span class="sy3">&amp;&amp;</span>
weakly_incrementable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_sentinel_for">&#27010;&#24565; <a href="cpp-iterator-sentinel_for.html"><code>sentinel_for</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> S, <span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept sentinel_for <span class="sy1">=</span>
semiregular<span class="sy1">&lt;</span>S<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
input_or_output_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
__WeaklyEqualityComparableWith<span class="sy1">&lt;</span>S, I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_sized_sentinel_for">&#27010;&#24565; <a href="cpp-iterator-sized_sentinel_for.html"><code>sized_sentinel_for</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> S, <span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept sized_sentinel_for <span class="sy1">=</span>
sentinel_for<span class="sy1">&lt;</span>S, I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
<span class="sy3">!</span>disable_sized_sentinel<span class="sy1">&lt;</span>remove_cv_t<span class="sy1">&lt;</span>S<span class="sy1">&gt;</span>, remove_cv_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
requires<span class="br0">(</span><span class="kw4">const</span> I<span class="sy3">&amp;</span> i, <span class="kw4">const</span> S<span class="sy3">&amp;</span> s<span class="br0">)</span> <span class="br0">{</span>
<span class="br0">{</span> s <span class="sy2">-</span> i <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">{</span> i <span class="sy2">-</span> s <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_input_iterator">&#27010;&#24565; <a href="cpp-iterator-input_iterator.html"><code>input_iterator</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept input_iterator <span class="sy1">=</span>
input_or_output_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_readable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
requires <span class="br0">{</span> <span class="kw1">typename</span> <span class="coMULTI">/*ITER_CONCEPT*/</span><span class="br0">(</span>I<span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span> <span class="sy3">&amp;&amp;</span>
derived_from<span class="sy1">&lt;</span><span class="coMULTI">/*ITER_CONCEPT*/</span><span class="br0">(</span>I<span class="br0">)</span>, input_iterator_tag<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_output_iterator">&#27010;&#24565; <a href="cpp-iterator-output_iterator.html"><code>output_iterator</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I, <span class="kw1">class</span> T<span class="sy1">&gt;</span>
concept output_iterator <span class="sy1">=</span>
input_or_output_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_writable<span class="sy1">&lt;</span>I, T<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
requires<span class="br0">(</span>I i, T<span class="sy3">&amp;&amp;</span> t<span class="br0">)</span> <span class="br0">{</span>
<span class="sy2">*</span>i<span class="sy2">++</span> <span class="sy1">=</span> <a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="br0">(</span>t<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#19981;&#35201;&#27714;&#20445;&#25345;&#30456;&#31561;&#24615;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_forward_iterator">&#27010;&#24565; <a href="cpp-iterator-forward_iterator.html"><code>forward_iterator</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept forward_iterator <span class="sy1">=</span>
input_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
derived_from<span class="sy1">&lt;</span><span class="coMULTI">/*ITER_CONCEPT*/</span><span class="br0">(</span>I<span class="br0">)</span>, forward_iterator_tag<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
incrementable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
sentinel_for<span class="sy1">&lt;</span>I, I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_bidirectional_iterator">&#27010;&#24565; <a href="cpp-iterator-bidirectional_iterator.html"><code>bidirectional_iterator</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept bidirectional_iterator <span class="sy1">=</span>
forward_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
derived_from<span class="sy1">&lt;</span><span class="coMULTI">/*ITER_CONCEPT*/</span><span class="br0">(</span>I<span class="br0">)</span>, bidirectional_iterator_tag<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
requires<span class="br0">(</span>I i<span class="br0">)</span> <span class="br0">{</span>
<span class="br0">{</span> <span class="sy2">--</span>i <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>I<span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">{</span> i<span class="sy2">--</span> <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_random_access_iterator">&#27010;&#24565; <a href="cpp-iterator-random_access_iterator.html"><code>random_access_iterator</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept random_access_iterator <span class="sy1">=</span>
bidirectional_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
derived_from<span class="sy1">&lt;</span><span class="coMULTI">/*ITER_CONCEPT*/</span><span class="br0">(</span>I<span class="br0">)</span>, random_access_iterator_tag<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
totally_ordered<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
sized_sentinel_for<span class="sy1">&lt;</span>I, I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
requires<span class="br0">(</span>I i, <span class="kw4">const</span> I j, <span class="kw4">const</span> iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n<span class="br0">)</span> <span class="br0">{</span>
<span class="br0">{</span> i <span class="sy2">+</span><span class="sy1">=</span> n <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>I<span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">{</span> j <span class="sy2">+</span> n <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">{</span> n <span class="sy2">+</span> j <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">{</span> i <span class="sy2">-</span><span class="sy1">=</span> n <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>I<span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">{</span> j <span class="sy2">-</span> n <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">{</span> j<span class="br0">[</span>n<span class="br0">]</span> <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>iter_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_contiguous_iterator">&#27010;&#24565; <a href="cpp-iterator-contiguous_iterator.html"><code>contiguous_iterator</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept contiguous_iterator <span class="sy1">=</span>
random_access_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
derived_from<span class="sy1">&lt;</span><span class="coMULTI">/*ITER_CONCEPT*/</span><span class="br0">(</span>I<span class="br0">)</span>, contiguous_iterator_tag<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
is_lvalue_reference_v<span class="sy1">&lt;</span>iter_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
same_as<span class="sy1">&lt;</span>iter_value_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span>, remove_cvref_t<span class="sy1">&lt;</span>iter_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
requires<span class="br0">(</span><span class="kw4">const</span> I<span class="sy3">&amp;</span> i<span class="br0">)</span> <span class="br0">{</span>
<span class="br0">{</span> to_address<span class="br0">(</span>i<span class="br0">)</span> <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> same_as<span class="sy1">&lt;</span>add_pointer_t<span class="sy1">&lt;</span>iter_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirectly_unary_invocable">&#27010;&#24565; <a href="cpp-iterator-indirectly_unary_invocable.html"><code>indirectly_unary_invocable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept indirectly_unary_invocable <span class="sy1">=</span>
indirectly_readable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
copy_constructible<span class="sy1">&lt;</span>F<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
invocable<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
invocable<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
invocable<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_common_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
common_reference_with<span class="sy1">&lt;</span>
invoke_result_t<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span>,
invoke_result_t<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirectly_regular_unary_invocable">&#27010;&#24565; <a href="cpp-iterator-indirectly_unary_invocable.html"><code>indirectly_regular_unary_invocable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept indirectly_regular_unary_invocable <span class="sy1">=</span>
indirectly_readable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
copy_constructible<span class="sy1">&lt;</span>F<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
regular_invocable<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
regular_invocable<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
regular_invocable<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_common_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
common_reference_with<span class="sy1">&lt;</span>
invoke_result_t<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span>,
invoke_result_t<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirect_unary_predicate">&#27010;&#24565; <a href="cpp-iterator-indirect_unary_predicate.html"><code>indirect_unary_predicate</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept indirect_unary_predicate <span class="sy1">=</span>
indirectly_readable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
copy_constructible<span class="sy1">&lt;</span>F<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
predicate<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
predicate<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
predicate<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_common_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirect_binary_predicate">&#27010;&#24565; <a href="cpp-iterator-indirect_binary_predicate.html"><code>indirect_binary_predicate</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span> I1, <span class="kw1">class</span> I2 <span class="sy1">=</span> I1<span class="sy1">&gt;</span>
concept indirect_binary_predicate <span class="sy1">=</span>
indirectly_readable<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span> indirectly_readable<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
copy_constructible<span class="sy1">&lt;</span>F<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
predicate<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span><span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
predicate<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span><span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
predicate<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span>, iter_value_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
predicate<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span>, iter_reference_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
predicate<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_common_reference_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span>, iter_common_reference_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirect_equivalence_relation">&#27010;&#24565; <a href="cpp-iterator-indirect_equivalence_relation.html"><code>indirect_equivalence_relation</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span> I1, <span class="kw1">class</span> I2 <span class="sy1">=</span> I1<span class="sy1">&gt;</span>
concept indirect_equivalence_relation <span class="sy1">=</span>
indirectly_readable<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span> indirectly_readable<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
copy_constructible<span class="sy1">&lt;</span>F<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
equivalence_relation<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span><span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
equivalence_relation<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span><span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
equivalence_relation<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span>, iter_value_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
equivalence_relation<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span>, iter_reference_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
equivalence_relation<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_common_reference_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span>, iter_common_reference_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirect_strict_weak_order">&#27010;&#24565; <a href="cpp-iterator-indirect_strict_weak_order.html"><code>indirect_strict_weak_order</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> F, <span class="kw1">class</span> I1, <span class="kw1">class</span> I2 <span class="sy1">=</span> I1<span class="sy1">&gt;</span>
concept indirect_strict_weak_order <span class="sy1">=</span>
indirectly_readable<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span> indirectly_readable<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
copy_constructible<span class="sy1">&lt;</span>F<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
strict_weak_order<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span><span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
strict_weak_order<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_value_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span><span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
strict_weak_order<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span>, iter_value_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
strict_weak_order<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span>, iter_reference_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
strict_weak_order<span class="sy1">&lt;</span>F<span class="sy3">&amp;</span>, iter_common_reference_t<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span>, iter_common_reference_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirectly_movable">&#27010;&#24565; <a href="cpp-iterator-indirectly_movable.html"><code>indirectly_movable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">&gt;</span>
concept indirectly_movable <span class="sy1">=</span>
indirectly_readable<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_writable<span class="sy1">&lt;</span>Out, iter_rvalue_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirectly_movable_storable">&#27010;&#24565; <a href="cpp-iterator-indirectly_movable_storable.html"><code>indirectly_movable_storable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">&gt;</span>
concept indirectly_movable_storable <span class="sy1">=</span>
indirectly_movable<span class="sy1">&lt;</span>In, Out<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_writable<span class="sy1">&lt;</span>Out, iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
movable<span class="sy1">&lt;</span>iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
constructible_from<span class="sy1">&lt;</span>iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span>, iter_rvalue_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
assignable_from<span class="sy1">&lt;</span>iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy3">&amp;</span>, iter_rvalue_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirectly_copyable">&#27010;&#24565; <a href="cpp-iterator-indirectly_copyable.html"><code>indirectly_copyable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">&gt;</span>
concept indirectly_copyable <span class="sy1">=</span>
indirectly_readable<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_writable<span class="sy1">&lt;</span>Out, iter_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirectly_copyable_storable">&#27010;&#24565; <a href="cpp-iterator-indirectly_copyable_storable.html"><code>indirectly_copyable_storable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">&gt;</span>
concept indirectly_copyable_storable <span class="sy1">=</span>
indirectly_copyable<span class="sy1">&lt;</span>In, Out<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_writable<span class="sy1">&lt;</span>Out, iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_writable<span class="sy1">&lt;</span>Out, <span class="kw4">const</span> iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_writable<span class="sy1">&lt;</span>Out, iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy3">&amp;&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_writable<span class="sy1">&lt;</span>Out, <span class="kw4">const</span> iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy3">&amp;&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
copyable<span class="sy1">&lt;</span>iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
constructible_from<span class="sy1">&lt;</span>iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span>, iter_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;&gt;</span> <span class="sy3">&amp;&amp;</span>
assignable_from<span class="sy1">&lt;</span>iter_value_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;</span><span class="sy3">&amp;</span>, iter_reference_t<span class="sy1">&lt;</span>In<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirectly_swappable">&#27010;&#24565; <a href="cpp-iterator-indirectly_swappable.html"><code>indirectly_swappable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2 <span class="sy1">=</span> I1<span class="sy1">&gt;</span>
concept indirectly_swappable <span class="sy1">=</span>
indirectly_readable<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span> indirectly_readable<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
requires<span class="br0">(</span><span class="kw4">const</span> I1 i1, <span class="kw4">const</span> I2 i2<span class="br0">)</span> <span class="br0">{</span>
ranges<span class="sy4">::</span><span class="me2">iter_swap</span><span class="br0">(</span>i1, i1<span class="br0">)</span><span class="sy4">;</span>
ranges<span class="sy4">::</span><span class="me2">iter_swap</span><span class="br0">(</span>i2, i2<span class="br0">)</span><span class="sy4">;</span>
ranges<span class="sy4">::</span><span class="me2">iter_swap</span><span class="br0">(</span>i1, i2<span class="br0">)</span><span class="sy4">;</span>
ranges<span class="sy4">::</span><span class="me2">iter_swap</span><span class="br0">(</span>i2, i1<span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirectly_comparable">&#27010;&#24565; <a href="cpp-iterator-indirectly_comparable.html"><code>indirectly_comparable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2, <span class="kw1">class</span> R, <span class="kw1">class</span> P1 <span class="sy1">=</span> identity, <span class="kw1">class</span> P2 <span class="sy1">=</span> identity<span class="sy1">&gt;</span>
concept indirectly_comparable <span class="sy1">=</span>
indirect_relation<span class="sy1">&lt;</span>R, projected<span class="sy1">&lt;</span>I1, P1<span class="sy1">&gt;</span>, projected<span class="sy1">&lt;</span>I2, P2<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_permutable">&#27010;&#24565; <a href="cpp-iterator-permutable.html"><code>permutable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
concept permutable <span class="sy1">=</span>
forward_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_movable_storable<span class="sy1">&lt;</span>I, I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_swappable<span class="sy1">&lt;</span>I, I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_mergeable">&#27010;&#24565; <a href="cpp-iterator-mergeable.html"><code>mergeable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2, <span class="kw1">class</span> Out, <span class="kw1">class</span> R <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>,
<span class="kw1">class</span> P1 <span class="sy1">=</span> identity, <span class="kw1">class</span> P2 <span class="sy1">=</span> identity<span class="sy1">&gt;</span>
concept mergeable <span class="sy1">=</span>
input_iterator<span class="sy1">&lt;</span>I1<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
input_iterator<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
weakly_incrementable<span class="sy1">&lt;</span>Out<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_copyable<span class="sy1">&lt;</span>I1, Out<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirectly_copyable<span class="sy1">&lt;</span>I2, Out<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirect_strict_weak_order<span class="sy1">&lt;</span>R, projected<span class="sy1">&lt;</span>I1, P1<span class="sy1">&gt;</span>, projected<span class="sy1">&lt;</span>I2, P2<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_sortable">&#27010;&#24565; <a href="cpp-iterator-sortable.html"><code>sortable</code></a></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I, <span class="kw1">class</span> R <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">less</span>, <span class="kw1">class</span> P <span class="sy1">=</span> identity<span class="sy1">&gt;</span>
concept sortable <span class="sy1">=</span>
permutable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
indirect_strict_weak_order<span class="sy1">&lt;</span>R, projected<span class="sy1">&lt;</span>I, P<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::incrementable_traits">&#31867;&#27169;&#26495; <span class="t-lc">std::incrementable_traits</span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span><span class="sy1">&gt;</span> <span class="kw1">struct</span> incrementable_traits <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
requires is_object_v<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> incrementable_traits<span class="sy1">&lt;</span>T<span class="sy2">*</span><span class="sy1">&gt;</span> <span class="br0">{</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> ptrdiff_t<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
<span class="kw1">struct</span> incrementable_traits<span class="sy1">&lt;</span><span class="kw4">const</span> I<span class="sy1">&gt;</span>
<span class="sy4">:</span> incrementable_traits<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
requires requires <span class="br0">{</span> <span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">difference_type</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw1">struct</span> incrementable_traits<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span> <span class="br0">{</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> <span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">difference_type</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
requires <span class="br0">(</span><span class="sy3">!</span>requires <span class="br0">{</span> <span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">difference_type</span><span class="sy4">;</span> <span class="br0">}</span> <span class="sy3">&amp;&amp;</span>
requires<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&amp;</span> a, <span class="kw4">const</span> T<span class="sy3">&amp;</span> b<span class="br0">)</span> <span class="br0">{</span> <span class="br0">{</span> a <span class="sy2">-</span> b <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">&gt;</span> integral<span class="sy4">;</span> <span class="br0">}</span><span class="br0">)</span>
<span class="kw1">struct</span> incrementable_traits<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span> <span class="br0">{</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> make_signed_t<span class="sy1">&lt;</span>decltype<span class="br0">(</span>declval<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span> <span class="sy2">-</span> declval<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw1">using</span> iter_difference_t <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::indirectly_readable_traits">&#31867;&#27169;&#26495; <span class="t-lc">std::indirectly_readable_traits</span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span><span class="sy1">&gt;</span> <span class="kw1">struct</span> __cond_value_type <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
requires is_object_v<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> __cond_value_type <span class="br0">{</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> remove_cv_t<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span><span class="sy1">&gt;</span> <span class="kw1">struct</span> indirectly_readable_traits <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> indirectly_readable_traits<span class="sy1">&lt;</span>T<span class="sy2">*</span><span class="sy1">&gt;</span>
<span class="sy4">:</span> __cond_value_type<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span> <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
requires is_array_v<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span>
<span class="kw1">struct</span> indirectly_readable_traits<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="br0">{</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> remove_cv_t<span class="sy1">&lt;</span>remove_extent_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
<span class="kw1">struct</span> indirectly_readable_traits<span class="sy1">&lt;</span><span class="kw4">const</span> I<span class="sy1">&gt;</span>
<span class="sy4">:</span> indirectly_readable_traits<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
requires requires <span class="br0">{</span> <span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">value_type</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw1">struct</span> indirectly_readable_traits<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span>
<span class="sy4">:</span> __cond_value_type<span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">value_type</span><span class="sy1">&gt;</span> <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
requires requires <span class="br0">{</span> <span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">element_type</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw1">struct</span> indirectly_readable_traits<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span>
<span class="sy4">:</span> __cond_value_type<span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">element_type</span><span class="sy1">&gt;</span> <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::projected">&#31867;&#27169;&#26495; <span class="t-lc">std::projected</span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>indirectly_readable I, indirectly_regular_unary_invocable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> Proj<span class="sy1">&gt;</span>
<span class="kw1">struct</span> projected <span class="br0">{</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> remove_cvref_t<span class="sy1">&lt;</span>indirect_result_t<span class="sy1">&lt;</span>Proj<span class="sy3">&amp;</span>, I<span class="sy1">&gt;&gt;</span><span class="sy4">;</span>
indirect_result_t<span class="sy1">&lt;</span>Proj<span class="sy3">&amp;</span>, I<span class="sy1">&gt;</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span> <span class="co1">// &#19981;&#23450;&#20041;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>weakly_incrementable I, <span class="kw1">class</span> Proj<span class="sy1">&gt;</span>
<span class="kw1">struct</span> incrementable_traits<span class="sy1">&lt;</span>projected<span class="sy1">&lt;</span>I, Proj<span class="sy1">&gt;&gt;</span> <span class="br0">{</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::iterator_traits">&#31867;&#27169;&#26495; <span class="t-lc"><a href="cpp-iterator-iterator_traits.html">std::iterator_traits</a></span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
<span class="kw1">struct</span> iterator_traits <span class="br0">{</span>
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">using</span> reference <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span>
requires is_object_v<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> iterator_traits<span class="sy1">&lt;</span>T<span class="sy2">*</span><span class="sy1">&gt;</span> <span class="br0">{</span>
<span class="kw1">using</span> iterator_concept <span class="sy1">=</span> contiguous_iterator_tag<span class="sy4">;</span>
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> random_access_iterator_tag<span class="sy4">;</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> remove_cv_t<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> ptrdiff_t<span class="sy4">;</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> T<span class="sy2">*</span><span class="sy4">;</span>
<span class="kw1">using</span> reference <span class="sy1">=</span> T<span class="sy3">&amp;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E8.BF.AD.E4.BB.A3.E5.99.A8.E6.A0.87.E7.AD.BE">&#36845;&#20195;&#22120;&#26631;&#31614;</span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">struct</span> input_iterator_tag <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> output_iterator_tag <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> forward_iterator_tag<span class="sy4">:</span> <span class="kw1">public</span> input_iterator_tag <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> bidirectional_iterator_tag<span class="sy4">:</span> <span class="kw1">public</span> forward_iterator_tag <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> random_access_iterator_tag<span class="sy4">:</span> <span class="kw1">public</span> bidirectional_iterator_tag <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> contiguous_iterator_tag<span class="sy4">:</span> <span class="kw1">public</span> random_access_iterator_tag <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::reverse_iterator">&#31867;&#27169;&#26495; <span class="t-lc"><a href="cpp-iterator-reverse_iterator.html">std::reverse_iterator</a></span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter<span class="sy1">&gt;</span>
<span class="kw1">class</span> reverse_iterator <span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw1">using</span> iterator_type <span class="sy1">=</span> Iter<span class="sy4">;</span>
<span class="kw1">using</span> iterator_concept <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> iter_value_t<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> iter_difference_t<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="kw1">typename</span> iterator_traits<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">pointer</span><span class="sy4">;</span>
<span class="kw1">using</span> reference <span class="sy1">=</span> iter_reference_t<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> reverse_iterator<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> <span class="kw1">explicit</span> reverse_iterator<span class="br0">(</span>Iter x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> U<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> reverse_iterator<span class="br0">(</span><span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>U<span class="sy1">&gt;</span><span class="sy3">&amp;</span> u<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> U<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> reverse_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>U<span class="sy1">&gt;</span><span class="sy3">&amp;</span> u<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> Iter base<span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> reference operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> pointer operator<span class="sy2">-</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> requires <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> reverse_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> reverse_iterator operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> reverse_iterator<span class="sy3">&amp;</span> operator<span class="sy2">--</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> reverse_iterator operator<span class="sy2">--</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> reverse_iterator operator<span class="sy2">+</span> <span class="br0">(</span>difference_type n<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> reverse_iterator<span class="sy3">&amp;</span> operator<span class="sy2">+</span><span class="sy1">=</span><span class="br0">(</span>difference_type n<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> reverse_iterator operator<span class="sy2">-</span> <span class="br0">(</span>difference_type n<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> reverse_iterator<span class="sy3">&amp;</span> operator<span class="sy2">-</span><span class="sy1">=</span><span class="br0">(</span>difference_type n<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> <span class="coMULTI">/* &#26410;&#25351;&#26126; */</span> operator<span class="br0">[</span><span class="br0">]</span><span class="br0">(</span>difference_type n<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> iter_rvalue_reference_t<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span>
iter_move<span class="br0">(</span><span class="kw4">const</span> reverse_iterator<span class="sy3">&amp;</span> i<span class="br0">)</span> <span class="kw1">noexcept</span><span class="br0">(</span><span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>indirectly_swappable<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span> Iter2<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> <span class="kw4">void</span>
iter_swap<span class="br0">(</span><span class="kw4">const</span> reverse_iterator<span class="sy3">&amp;</span> x,
<span class="kw4">const</span> reverse_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span> <span class="kw1">noexcept</span><span class="br0">(</span><span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">protected</span><span class="sy4">:</span>
Iter current<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::back_insert_iterator">&#31867;&#27169;&#26495; <span class="t-lc"><a href="cpp-iterator-back_insert_iterator.html">std::back_insert_iterator</a></span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Container<span class="sy1">&gt;</span>
<span class="kw1">class</span> back_insert_iterator <span class="br0">{</span>
<span class="kw1">protected</span><span class="sy4">:</span>
Container<span class="sy2">*</span> container <span class="sy1">=</span> nullptr<span class="sy4">;</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> output_iterator_tag<span class="sy4">;</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> ptrdiff_t<span class="sy4">;</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> reference <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> container_type <span class="sy1">=</span> Container<span class="sy4">;</span>
<span class="kw4">constexpr</span> back_insert_iterator<span class="br0">(</span><span class="br0">)</span> <span class="kw1">noexcept</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> <span class="kw1">explicit</span> back_insert_iterator<span class="br0">(</span>Container<span class="sy3">&amp;</span> x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> back_insert_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> <span class="kw1">typename</span> Container<span class="sy4">::</span><span class="me2">value_type</span><span class="sy3">&amp;</span> value<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> back_insert_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw1">typename</span> Container<span class="sy4">::</span><span class="me2">value_type</span><span class="sy3">&amp;&amp;</span> value<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> back_insert_iterator<span class="sy3">&amp;</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> back_insert_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> back_insert_iterator operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::front_insert_iterator">&#31867;&#27169;&#26495; <span class="t-lc"><a href="cpp-iterator-front_insert_iterator.html">std::front_insert_iterator</a></span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Container<span class="sy1">&gt;</span>
<span class="kw1">class</span> front_insert_iterator <span class="br0">{</span>
<span class="kw1">protected</span><span class="sy4">:</span>
Container<span class="sy2">*</span> container <span class="sy1">=</span> nullptr<span class="sy4">;</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> output_iterator_tag<span class="sy4">;</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> ptrdiff_t<span class="sy4">;</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> reference <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> container_type <span class="sy1">=</span> Container<span class="sy4">;</span>
<span class="kw4">constexpr</span> front_insert_iterator<span class="br0">(</span>Container<span class="sy3">&amp;</span> x<span class="br0">)</span> <span class="kw1">noexcept</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> <span class="kw1">explicit</span> front_insert_iterator<span class="br0">(</span>Container<span class="sy3">&amp;</span> x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> front_insert_iterator<span class="sy3">&amp;</span>
operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> <span class="kw1">typename</span> Container<span class="sy4">::</span><span class="me2">value_type</span><span class="sy3">&amp;</span> value<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> front_insert_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw1">typename</span> Container<span class="sy4">::</span><span class="me2">value_type</span><span class="sy3">&amp;&amp;</span> value<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> front_insert_iterator<span class="sy3">&amp;</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> front_insert_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> front_insert_iterator operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::insert_iterator">&#31867;&#27169;&#26495; <span class="t-lc"><a href="cpp-iterator-insert_iterator.html">std::insert_iterator</a></span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Container<span class="sy1">&gt;</span>
<span class="kw1">class</span> insert_iterator <span class="br0">{</span>
<span class="kw1">protected</span><span class="sy4">:</span>
Container<span class="sy2">*</span> container <span class="sy1">=</span> nullptr<span class="sy4">;</span>
ranges<span class="sy4">::</span><span class="me2">iterator_t</span><span class="sy1">&lt;</span>Container<span class="sy1">&gt;</span> iter <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">iterator_t</span><span class="sy1">&lt;</span>Container<span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> output_iterator_tag<span class="sy4">;</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> ptrdiff_t<span class="sy4">;</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> reference <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> container_type <span class="sy1">=</span> Container<span class="sy4">;</span>
insert_iterator<span class="br0">(</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> insert_iterator<span class="br0">(</span>Container<span class="sy3">&amp;</span> x, ranges<span class="sy4">::</span><span class="me2">iterator_t</span><span class="sy1">&lt;</span>Container<span class="sy1">&gt;</span> i<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> insert_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> <span class="kw1">typename</span> Container<span class="sy4">::</span><span class="me2">value_type</span><span class="sy3">&amp;</span> value<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> insert_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw1">typename</span> Container<span class="sy4">::</span><span class="me2">value_type</span><span class="sy3">&amp;&amp;</span> value<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> insert_iterator<span class="sy3">&amp;</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> insert_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> insert_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::move_iterator">&#31867;&#27169;&#26495; <span class="t-lc"><a href="cpp-iterator-move_iterator.html">std::move_iterator</a></span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Iter<span class="sy1">&gt;</span>
<span class="kw1">class</span> move_iterator <span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw1">using</span> iterator_type <span class="sy1">=</span> Iter<span class="sy4">;</span>
<span class="kw1">using</span> iterator_concept <span class="sy1">=</span> input_iterator_tag<span class="sy4">;</span>
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> iter_value_t<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> iter_difference_t<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> Iter<span class="sy4">;</span>
<span class="kw1">using</span> reference <span class="sy1">=</span> iter_rvalue_reference_t<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> move_iterator<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> <span class="kw1">explicit</span> move_iterator<span class="br0">(</span>Iter i<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> U<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> move_iterator<span class="br0">(</span><span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>U<span class="sy1">&gt;</span><span class="sy3">&amp;</span> u<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> U<span class="sy1">&gt;</span> <span class="kw4">constexpr</span> move_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>U<span class="sy1">&gt;</span><span class="sy3">&amp;</span> u<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> iterator_type base<span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="sy3">&amp;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> iterator_type base<span class="br0">(</span><span class="br0">)</span> <span class="sy3">&amp;&amp;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> reference operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> pointer operator<span class="sy2">-</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> move_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> <span class="kw4">auto</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> move_iterator<span class="sy3">&amp;</span> operator<span class="sy2">--</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> move_iterator operator<span class="sy2">--</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> move_iterator operator<span class="sy2">+</span><span class="br0">(</span>difference_type n<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> move_iterator<span class="sy3">&amp;</span> operator<span class="sy2">+</span><span class="sy1">=</span><span class="br0">(</span>difference_type n<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> move_iterator operator<span class="sy2">-</span><span class="br0">(</span>difference_type n<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> move_iterator<span class="sy3">&amp;</span> operator<span class="sy2">-</span><span class="sy1">=</span><span class="br0">(</span>difference_type n<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> reference operator<span class="br0">[</span><span class="br0">]</span><span class="br0">(</span>difference_type n<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>sentinel_for<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span> S<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> <span class="kw4">bool</span>
operator<span class="sy1">==</span><span class="br0">(</span><span class="kw4">const</span> move_iterator<span class="sy3">&amp;</span> x, <span class="kw4">const</span> move_sentinel<span class="sy1">&lt;</span>S<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>sized_sentinel_for<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span> S<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> iter_difference_t<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span>
operator<span class="sy2">-</span><span class="br0">(</span><span class="kw4">const</span> move_sentinel<span class="sy1">&lt;</span>S<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x, <span class="kw4">const</span> move_iterator<span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>sized_sentinel_for<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span> S<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> iter_difference_t<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span>
operator<span class="sy2">-</span><span class="br0">(</span><span class="kw4">const</span> move_iterator<span class="sy3">&amp;</span> x, <span class="kw4">const</span> move_sentinel<span class="sy1">&lt;</span>S<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> iter_rvalue_reference_t<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span>
iter_move<span class="br0">(</span><span class="kw4">const</span> move_iterator<span class="sy3">&amp;</span> i<span class="br0">)</span>
<span class="kw1">noexcept</span><span class="br0">(</span><span class="kw1">noexcept</span><span class="br0">(</span>ranges<span class="sy4">::</span><span class="me2">iter_move</span><span class="br0">(</span>i.<span class="me1">current</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>indirectly_swappable<span class="sy1">&lt;</span>Iter<span class="sy1">&gt;</span> Iter2<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> <span class="kw4">void</span>
iter_swap<span class="br0">(</span><span class="kw4">const</span> move_iterator<span class="sy3">&amp;</span> x, <span class="kw4">const</span> move_iterator<span class="sy1">&lt;</span>Iter2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span>
<span class="kw1">noexcept</span><span class="br0">(</span><span class="kw1">noexcept</span><span class="br0">(</span>ranges<span class="sy4">::</span><span class="me2">iter_swap</span><span class="br0">(</span>x.<span class="me1">current</span>, y.<span class="me1">current</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">private</span><span class="sy4">:</span>
Iter current<span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::move_sentinel">&#31867;&#27169;&#26495; <span class="t-lc">std::move_sentinel</span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>semiregular S<span class="sy1">&gt;</span>
<span class="kw1">class</span> move_sentinel <span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw4">constexpr</span> move_sentinel<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> <span class="kw1">explicit</span> move_sentinel<span class="br0">(</span>S s<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> S2<span class="sy1">&gt;</span>
requires convertible_to<span class="sy1">&lt;</span><span class="kw4">const</span> S2<span class="sy3">&amp;</span>, S<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> move_sentinel<span class="br0">(</span><span class="kw4">const</span> move_sentinel<span class="sy1">&lt;</span>S2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> s<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> S2<span class="sy1">&gt;</span>
requires assignable_from<span class="sy1">&lt;</span>S<span class="sy3">&amp;</span>, <span class="kw4">const</span> S2<span class="sy3">&amp;</span><span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> move_sentinel<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> move_sentinel<span class="sy1">&lt;</span>S2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> s<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> S base<span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw1">private</span><span class="sy4">:</span>
S last<span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::common_iterator">&#31867;&#27169;&#26495; <span class="t-lc">std::common_iterator</span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_or_output_iterator I, sentinel_for<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> S<span class="sy1">&gt;</span>
requires <span class="br0">(</span><span class="sy3">!</span>same_as<span class="sy1">&lt;</span>I, S<span class="sy1">&gt;</span><span class="br0">)</span>
<span class="kw1">class</span> common_iterator <span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw4">constexpr</span> common_iterator<span class="br0">(</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> common_iterator<span class="br0">(</span>I i<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> common_iterator<span class="br0">(</span>S s<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I2, <span class="kw1">class</span> S2<span class="sy1">&gt;</span>
requires convertible_to<span class="sy1">&lt;</span><span class="kw4">const</span> I2<span class="sy3">&amp;</span>, I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span> convertible_to<span class="sy1">&lt;</span><span class="kw4">const</span> S2<span class="sy3">&amp;</span>, S<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> common_iterator<span class="br0">(</span><span class="kw4">const</span> common_iterator<span class="sy1">&lt;</span>I2, S2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I2, <span class="kw1">class</span> S2<span class="sy1">&gt;</span>
requires convertible_to<span class="sy1">&lt;</span><span class="kw4">const</span> I2<span class="sy3">&amp;</span>, I<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span> convertible_to<span class="sy1">&lt;</span><span class="kw4">const</span> S2<span class="sy3">&amp;</span>, S<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span>
assignable_from<span class="sy1">&lt;</span>I<span class="sy3">&amp;</span>, <span class="kw4">const</span> I2<span class="sy3">&amp;</span><span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span> assignable_from<span class="sy1">&lt;</span>S<span class="sy3">&amp;</span>, <span class="kw4">const</span> S2<span class="sy3">&amp;</span><span class="sy1">&gt;</span>
common_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> common_iterator<span class="sy1">&lt;</span>I2, S2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x<span class="br0">)</span><span class="sy4">;</span>
decltype<span class="br0">(</span><span class="kw4">auto</span><span class="br0">)</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
decltype<span class="br0">(</span><span class="kw4">auto</span><span class="br0">)</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span>
requires dereferenceable<span class="sy1">&lt;</span><span class="kw4">const</span> I<span class="sy1">&gt;</span><span class="sy4">;</span>
decltype<span class="br0">(</span><span class="kw4">auto</span><span class="br0">)</span> operator<span class="sy2">-</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span>
requires <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
common_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
decltype<span class="br0">(</span><span class="kw4">auto</span><span class="br0">)</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I2, sentinel_for<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> S2<span class="sy1">&gt;</span>
requires sentinel_for<span class="sy1">&lt;</span>S, I2<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span>
<span class="kw4">const</span> common_iterator<span class="sy3">&amp;</span> x, <span class="kw4">const</span> common_iterator<span class="sy1">&lt;</span>I2, S2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I2, sentinel_for<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> S2<span class="sy1">&gt;</span>
requires sentinel_for<span class="sy1">&lt;</span>S, I2<span class="sy1">&gt;</span> <span class="sy3">&amp;&amp;</span> equality_comparable_with<span class="sy1">&lt;</span>I, I2<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span>
<span class="kw4">const</span> common_iterator<span class="sy3">&amp;</span> x, <span class="kw4">const</span> common_iterator<span class="sy1">&lt;</span>I2, S2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>sized_sentinel_for<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> I2, sized_sentinel_for<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> S2<span class="sy1">&gt;</span>
requires sized_sentinel_for<span class="sy1">&lt;</span>S, I2<span class="sy1">&gt;</span>
<span class="kw1">friend</span> iter_difference_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span> operator<span class="sy2">-</span><span class="br0">(</span>
<span class="kw4">const</span> common_iterator<span class="sy3">&amp;</span> x, <span class="kw4">const</span> common_iterator<span class="sy1">&lt;</span>I2, S2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">friend</span> iter_rvalue_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> iter_move<span class="br0">(</span><span class="kw4">const</span> common_iterator<span class="sy3">&amp;</span> i<span class="br0">)</span>
<span class="kw1">noexcept</span><span class="br0">(</span><span class="kw1">noexcept</span><span class="br0">(</span>ranges<span class="sy4">::</span><span class="me2">iter_move</span><span class="br0">(</span>declval<span class="sy1">&lt;</span><span class="kw4">const</span> I<span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>
requires input_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>indirectly_swappable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> I2, <span class="kw1">class</span> S2<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">void</span> iter_swap<span class="br0">(</span><span class="kw4">const</span> common_iterator<span class="sy3">&amp;</span> x, <span class="kw4">const</span> common_iterator<span class="sy1">&lt;</span>I2, S2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span>
<span class="kw1">noexcept</span><span class="br0">(</span><span class="kw1">noexcept</span><span class="br0">(</span>ranges<span class="sy4">::</span><span class="me2">iter_swap</span><span class="br0">(</span>declval<span class="sy1">&lt;</span><span class="kw4">const</span> I<span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span>, declval<span class="sy1">&lt;</span><span class="kw4">const</span> I2<span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">private</span><span class="sy4">:</span>
variant<span class="sy1">&lt;</span>I, S<span class="sy1">&gt;</span> v_<span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I, <span class="kw1">class</span> S<span class="sy1">&gt;</span>
<span class="kw1">struct</span> incrementable_traits<span class="sy1">&lt;</span>common_iterator<span class="sy1">&lt;</span>I, S<span class="sy1">&gt;&gt;</span> <span class="br0">{</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_iterator I, <span class="kw1">class</span> S<span class="sy1">&gt;</span>
<span class="kw1">struct</span> iterator_traits<span class="sy1">&lt;</span>common_iterator<span class="sy1">&lt;</span>I, S<span class="sy1">&gt;&gt;</span> <span class="br0">{</span>
<span class="kw1">using</span> iterator_concept <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> iter_value_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="coMULTI">/* &#35265;&#25551;&#36848; */</span><span class="sy4">;</span>
<span class="kw1">using</span> reference <span class="sy1">=</span> iter_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB_std::default_sentinel_t">&#31867; <span class="t-lc">std::default_sentinel_t</span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">struct</span> default_sentinel_t <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::counted_iterator">&#31867;&#27169;&#26495; <span class="t-lc">std::counted_iterator</span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_or_output_iterator I<span class="sy1">&gt;</span>
<span class="kw1">class</span> counted_iterator <span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw1">using</span> iterator_type <span class="sy1">=</span> I<span class="sy4">;</span>
<span class="kw4">constexpr</span> counted_iterator<span class="br0">(</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> counted_iterator<span class="br0">(</span>I x, iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I2<span class="sy1">&gt;</span>
requires convertible_to<span class="sy1">&lt;</span><span class="kw4">const</span> I2<span class="sy3">&amp;</span>, I<span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> counted_iterator<span class="br0">(</span><span class="kw4">const</span> counted_iterator<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I2<span class="sy1">&gt;</span>
requires assignable_from<span class="sy1">&lt;</span>I<span class="sy3">&amp;</span>, <span class="kw4">const</span> I2<span class="sy3">&amp;</span><span class="sy1">&gt;</span>
<span class="kw4">constexpr</span> counted_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> counted_iterator<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> x<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> I base<span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="sy3">&amp;</span> requires copy_constructible<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> I base<span class="br0">(</span><span class="br0">)</span> <span class="sy3">&amp;&amp;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> count<span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> decltype<span class="br0">(</span><span class="kw4">auto</span><span class="br0">)</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> decltype<span class="br0">(</span><span class="kw4">auto</span><span class="br0">)</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span>
requires dereferenceable<span class="sy1">&lt;</span><span class="kw4">const</span> I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> counted_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
decltype<span class="br0">(</span><span class="kw4">auto</span><span class="br0">)</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> counted_iterator operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span>
requires forward_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> counted_iterator<span class="sy3">&amp;</span> operator<span class="sy2">--</span><span class="br0">(</span><span class="br0">)</span>
requires bidirectional_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> counted_iterator operator<span class="sy2">--</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span>
requires bidirectional_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> counted_iterator operator<span class="sy2">+</span><span class="br0">(</span>iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n<span class="br0">)</span> <span class="kw4">const</span>
requires random_access_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> counted_iterator operator<span class="sy2">+</span><span class="br0">(</span>
iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n, <span class="kw4">const</span> counted_iterator<span class="sy3">&amp;</span> x<span class="br0">)</span>
requires random_access_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> counted_iterator<span class="sy3">&amp;</span> operator<span class="sy2">+</span><span class="sy1">=</span><span class="br0">(</span>iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n<span class="br0">)</span>
requires random_access_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> counted_iterator operator<span class="sy2">-</span><span class="br0">(</span>iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n<span class="br0">)</span> <span class="kw4">const</span>
requires random_access_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>common_with<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> I2<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> iter_difference_t<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span> operator<span class="sy2">-</span><span class="br0">(</span>
<span class="kw4">const</span> counted_iterator<span class="sy3">&amp;</span> x, <span class="kw4">const</span> counted_iterator<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> operator<span class="sy2">-</span><span class="br0">(</span>
<span class="kw4">const</span> counted_iterator<span class="sy3">&amp;</span> x, default_sentinel_t<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> operator<span class="sy2">-</span><span class="br0">(</span>
default_sentinel_t, <span class="kw4">const</span> counted_iterator<span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> counted_iterator<span class="sy3">&amp;</span> operator<span class="sy2">-</span><span class="sy1">=</span><span class="br0">(</span>iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n<span class="br0">)</span>
requires random_access_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> decltype<span class="br0">(</span><span class="kw4">auto</span><span class="br0">)</span> operator<span class="br0">[</span><span class="br0">]</span><span class="br0">(</span>iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> n<span class="br0">)</span> <span class="kw4">const</span>
requires random_access_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>common_with<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> I2<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span>
<span class="kw4">const</span> counted_iterator<span class="sy3">&amp;</span> x, <span class="kw4">const</span> counted_iterator<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span>
<span class="kw4">const</span> counted_iterator<span class="sy3">&amp;</span> x, default_sentinel_t<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>common_with<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> I2<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> strong_ordering operator<span class="sy1">&lt;=&gt;</span><span class="br0">(</span>
<span class="kw4">const</span> counted_iterator<span class="sy3">&amp;</span> x, <span class="kw4">const</span> counted_iterator<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> iter_rvalue_reference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> iter_move<span class="br0">(</span><span class="kw4">const</span> counted_iterator<span class="sy3">&amp;</span> i<span class="br0">)</span>
<span class="kw1">noexcept</span><span class="br0">(</span><span class="kw1">noexcept</span><span class="br0">(</span>ranges<span class="sy4">::</span><span class="me2">iter_move</span><span class="br0">(</span>i.<span class="me1">current</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>
requires input_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>indirectly_swappable<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> I2<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> <span class="kw4">void</span> iter_swap<span class="br0">(</span><span class="kw4">const</span> counted_iterator<span class="sy3">&amp;</span> x,
<span class="kw4">const</span> counted_iterator<span class="sy1">&lt;</span>I2<span class="sy1">&gt;</span><span class="sy3">&amp;</span> y<span class="br0">)</span>
<span class="kw1">noexcept</span><span class="br0">(</span><span class="kw1">noexcept</span><span class="br0">(</span>ranges<span class="sy4">::</span><span class="me2">iter_swap</span><span class="br0">(</span>x.<span class="me1">current</span>, y.<span class="me1">current</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">private</span><span class="sy4">:</span>
I current <span class="sy1">=</span> I<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> length <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> I<span class="sy1">&gt;</span>
<span class="kw1">struct</span> incrementable_traits<span class="sy1">&lt;</span>counted_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span> <span class="br0">{</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> iter_difference_t<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>input_iterator I<span class="sy1">&gt;</span>
<span class="kw1">struct</span> iterator_traits<span class="sy1">&lt;</span>counted_iterator<span class="sy1">&lt;</span>I<span class="sy1">&gt;&gt;</span> <span class="sy4">:</span> iterator_traits<span class="sy1">&lt;</span>I<span class="sy1">&gt;</span> <span class="br0">{</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB_std::unreachable_sentinel_t">&#31867; <span class="t-lc">std::unreachable_sentinel_t</span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">struct</span> unreachable_sentinel_t <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span>weakly_incrementable I<span class="sy1">&gt;</span>
<span class="kw1">friend</span> <span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span>unreachable_sentinel_t, <span class="kw4">const</span> I<span class="sy3">&amp;</span><span class="br0">)</span> <span class="kw1">noexcept</span>
<span class="br0">{</span> <span class="kw1">return</span> <span class="kw2">false</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::istream_iterator">&#31867;&#27169;&#26495; <span class="t-lc"><a href="cpp-iterator-istream_iterator.html">std::istream_iterator</a></span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, <span class="kw1">class</span> CharT <span class="sy1">=</span> <span class="kw4">char</span>, <span class="kw1">class</span> Traits <span class="sy1">=</span> char_traits<span class="sy1">&lt;</span>CharT<span class="sy1">&gt;</span>,
<span class="kw1">class</span> Distance <span class="sy1">=</span> ptrdiff_t<span class="sy1">&gt;</span>
<span class="kw1">class</span> istream_iterator <span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> input_iterator_tag<span class="sy4">;</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> T<span class="sy4">;</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> Distance<span class="sy4">;</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="kw4">const</span> T<span class="sy2">*</span><span class="sy4">;</span>
<span class="kw1">using</span> reference <span class="sy1">=</span> <span class="kw4">const</span> T<span class="sy3">&amp;</span><span class="sy4">;</span>
<span class="kw1">using</span> char_type <span class="sy1">=</span> CharT<span class="sy4">;</span>
<span class="kw1">using</span> traits_type <span class="sy1">=</span> Traits<span class="sy4">;</span>
<span class="kw1">using</span> istream_type <span class="sy1">=</span> basic_istream<span class="sy1">&lt;</span>CharT, Traits<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> istream_iterator<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> istream_iterator<span class="br0">(</span>default_sentinel_t<span class="br0">)</span><span class="sy4">;</span>
istream_iterator<span class="br0">(</span>istream_type<span class="sy3">&amp;</span> s<span class="br0">)</span><span class="sy4">;</span>
istream_iterator<span class="br0">(</span><span class="kw4">const</span> istream_iterator<span class="sy3">&amp;</span> x<span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
~istream_iterator<span class="br0">(</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
istream_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> istream_iterator<span class="sy3">&amp;</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
<span class="kw4">const</span> T<span class="sy3">&amp;</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw4">const</span> T<span class="sy2">*</span> operator<span class="sy2">-</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
istream_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
istream_iterator operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">friend</span> <span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span><span class="kw4">const</span> istream_iterator<span class="sy3">&amp;</span> i, default_sentinel_t<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">private</span><span class="sy4">:</span>
basic_istream<span class="sy1">&lt;</span>CharT, Traits<span class="sy1">&gt;</span><span class="sy2">*</span> in_stream<span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
T value<span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::ostream_iterator">&#31867;&#27169;&#26495; <span class="t-lc"><a href="cpp-iterator-ostream_iterator.html">std::ostream_iterator</a></span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> T, <span class="kw1">class</span> CharT <span class="sy1">=</span> <span class="kw4">char</span>, classTraits <span class="sy1">=</span> char_traits<span class="sy1">&lt;</span>CharT<span class="sy1">&gt;&gt;</span>
<span class="kw1">class</span> ostream_iterator <span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> output_iterator_tag<span class="sy4">;</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> ptrdiff_t<span class="sy4">;</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> reference <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> char_type <span class="sy1">=</span> CharT<span class="sy4">;</span>
<span class="kw1">using</span> traits_type <span class="sy1">=</span> Traits<span class="sy4">;</span>
<span class="kw1">using</span> ostream_type <span class="sy1">=</span> basic_ostream<span class="sy1">&lt;</span>CharT, Traits<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> ostreambuf_iterator<span class="br0">(</span><span class="br0">)</span> <span class="kw1">noexcept</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
ostream_iterator<span class="br0">(</span>ostream_type<span class="sy3">&amp;</span> s<span class="br0">)</span><span class="sy4">;</span>
ostream_iterator<span class="br0">(</span>ostream_type<span class="sy3">&amp;</span> s, <span class="kw4">const</span> CharT<span class="sy2">*</span> delimiter<span class="br0">)</span><span class="sy4">;</span>
ostream_iterator<span class="br0">(</span><span class="kw4">const</span> ostream_iterator<span class="sy3">&amp;</span> x<span class="br0">)</span><span class="sy4">;</span>
~ostream_iterator<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
ostream_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> ostream_iterator<span class="sy3">&amp;</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
ostream_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&amp;</span> value<span class="br0">)</span><span class="sy4">;</span>
ostream_iterator<span class="sy3">&amp;</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
ostream_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
ostream_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">private</span><span class="sy4">:</span>
basic_ostream<span class="sy1">&lt;</span>CharT, Traits<span class="sy1">&gt;</span><span class="sy2">*</span> out_stream <span class="sy1">=</span> nullptr<span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="kw4">const</span> CharT<span class="sy2">*</span> delim <span class="sy1">=</span> nullptr<span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::istreambuf_iterator">&#31867;&#27169;&#26495; <span class="t-lc"><a href="cpp-iterator-istreambuf_iterator.html">std::istreambuf_iterator</a></span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> CharT, <span class="kw1">class</span> Traits <span class="sy1">=</span> char_traits<span class="sy1">&lt;</span>CharT<span class="sy1">&gt;&gt;</span>
<span class="kw1">class</span> istreambuf_iterator <span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> input_iterator_tag<span class="sy4">;</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> CharT<span class="sy4">;</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> <span class="kw1">typename</span> Traits<span class="sy4">::</span><span class="me2">off_type</span><span class="sy4">;</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="coMULTI">/* &#26410;&#25351;&#26126; */</span><span class="sy4">;</span>
<span class="kw1">using</span> reference <span class="sy1">=</span> CharT<span class="sy4">;</span>
<span class="kw1">using</span> char_type <span class="sy1">=</span> CharT<span class="sy4">;</span>
<span class="kw1">using</span> traits_type <span class="sy1">=</span> Traits<span class="sy4">;</span>
<span class="kw1">using</span> int_type <span class="sy1">=</span> <span class="kw1">typename</span> Traits<span class="sy4">::</span><span class="me2">int_type</span><span class="sy4">;</span>
<span class="kw1">using</span> streambuf_type <span class="sy1">=</span> basic_streambuf<span class="sy1">&lt;</span>CharT, Traits<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">using</span> istream_type <span class="sy1">=</span> basic_istream<span class="sy1">&lt;</span>CharT, Traits<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">class</span> proxy<span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="kw4">constexpr</span> istreambuf_iterator<span class="br0">(</span><span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> istreambuf_iterator<span class="br0">(</span>default_sentinel_t<span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
istreambuf_iterator<span class="br0">(</span><span class="kw4">const</span> istreambuf_iterator<span class="sy3">&amp;</span><span class="br0">)</span> <span class="kw1">noexcept</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
~istreambuf_iterator<span class="br0">(</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
istreambuf_iterator<span class="br0">(</span>istream_type<span class="sy3">&amp;</span> s<span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
istreambuf_iterator<span class="br0">(</span>streambuf_type<span class="sy2">*</span> s<span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
istreambuf_iterator<span class="br0">(</span><span class="kw4">const</span> proxy<span class="sy3">&amp;</span> p<span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
istreambuf_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> istreambuf_iterator<span class="sy3">&amp;</span><span class="br0">)</span> <span class="kw1">noexcept</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
CharT operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
istreambuf_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
proxy operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">bool</span> equal<span class="br0">(</span><span class="kw4">const</span> istreambuf_iterator<span class="sy3">&amp;</span> b<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="kw1">friend</span> <span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span><span class="kw4">const</span> istreambuf_iterator<span class="sy3">&amp;</span> i, default_sentinel_t s<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">private</span><span class="sy4">:</span>
streambuf_type<span class="sy2">*</span> sbuf_<span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> CharT, <span class="kw1">class</span> Traits<span class="sy1">&gt;</span>
<span class="kw1">class</span> istreambuf_iterator<span class="sy1">&lt;</span>CharT, Traits<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">proxy</span> <span class="br0">{</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
CharT keep_<span class="sy4">;</span>
basic_streambuf<span class="sy1">&lt;</span>CharT, Traits<span class="sy1">&gt;</span><span class="sy2">*</span> sbuf_<span class="sy4">;</span>
proxy<span class="br0">(</span>CharT c, basic_streambuf<span class="sy1">&lt;</span>CharT, Traits<span class="sy1">&gt;</span><span class="sy2">*</span> sbuf<span class="br0">)</span>
<span class="sy4">:</span> keep_<span class="br0">(</span>c<span class="br0">)</span>, sbuf_<span class="br0">(</span>sbuf<span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span>
<span class="kw1">public</span><span class="sy4">:</span>
CharT operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> keep_<span class="sy4">;</span> <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::ostreambuf_iterator">&#31867;&#27169;&#26495; <span class="t-lc"><a href="cpp-iterator-ostreambuf_iterator.html">std::ostreambuf_iterator</a></span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> CharT, <span class="kw1">class</span> Traits <span class="sy1">=</span> char_traits<span class="sy1">&lt;</span>CharT<span class="sy1">&gt;&gt;</span>
<span class="kw1">class</span> ostreambuf_iterator <span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> output_iterator_tag<span class="sy4">;</span>
<span class="kw1">using</span> value_type <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> difference_type <span class="sy1">=</span> ptrdiff_t<span class="sy4">;</span>
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> reference <span class="sy1">=</span> <span class="kw4">void</span><span class="sy4">;</span>
<span class="kw1">using</span> char_type <span class="sy1">=</span> CharT<span class="sy4">;</span>
<span class="kw1">using</span> traits_type <span class="sy1">=</span> Traits<span class="sy4">;</span>
<span class="kw1">using</span> streambuf_type <span class="sy1">=</span> basic_streambuf<span class="sy1">&lt;</span>CharT, Traits<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw1">using</span> ostream_type <span class="sy1">=</span> basic_ostream<span class="sy1">&lt;</span>CharT, Traits<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="kw4">constexpr</span> ostreambuf_iterator<span class="br0">(</span><span class="br0">)</span> <span class="kw1">noexcept</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
ostreambuf_iterator<span class="br0">(</span>ostream_type<span class="sy3">&amp;</span> s<span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
ostreambuf_iterator<span class="br0">(</span>streambuf_type<span class="sy2">*</span> s<span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
ostreambuf_iterator<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span>CharT c<span class="br0">)</span><span class="sy4">;</span>
ostreambuf_iterator<span class="sy3">&amp;</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
ostreambuf_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
ostreambuf_iterator<span class="sy3">&amp;</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw4">bool</span> failed<span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
<span class="kw1">private</span><span class="sy4">:</span>
streambuf_type<span class="sy2">*</span> sbuf_ <span class="sy1">=</span> nullptr<span class="sy4">;</span> <span class="co1">// &#20165;&#29992;&#20110;&#38416;&#37322;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<h4><span class="mw-headline" id=".E7.B1.BB.E6.A8.A1.E6.9D.BF_std::iterator">&#31867;&#27169;&#26495; <span class="t-lc"><a href="cpp-iterator-iterator.html">std::iterator</a></span></span></h4>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> Category, <span class="kw1">class</span> T, <span class="kw1">class</span> Distance <span class="sy1">=</span> ptrdiff_t,
<span class="kw1">class</span> Pointer <span class="sy1">=</span> T<span class="sy2">*</span>, <span class="kw1">class</span> Reference <span class="sy1">=</span> T<span class="sy3">&amp;</span><span class="sy1">&gt;</span>
<span class="kw1">struct</span> iterator <span class="br0">{</span>
<span class="kw1">typedef</span> Category iterator_category<span class="sy4">;</span>
<span class="kw1">typedef</span> T value_type<span class="sy4">;</span>
<span class="kw1">typedef</span> Distance difference_type<span class="sy4">;</span>
<span class="kw1">typedef</span> Pointer pointer<span class="sy4">;</span>
<span class="kw1">typedef</span> Reference reference<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>