2385 lines
251 KiB
HTML
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>标准库头文件 <iterator></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%">标准库头文件</span> <iterator></h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <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>此头文件是<a href="cpp-iterator.html">迭代器</a>库的一部分。</p>
|
|
<table class="t-dsc-begin">
|
|
<tr>
|
|
<td colspan="2">
|
|
<h3><span class="mw-headline" id=".E6.A6.82.E5.BF.B5">概念</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">迭代器概念</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>指定类型通过应用运算符 <code>*</code> 可读<br />
|
|
<span class="t-mark">(概念)</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>指定可向迭代器所引用的对象写入值<br />
|
|
<span class="t-mark">(概念)</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>指定 <a href="cpp-concepts-semiregular.html"><code>semiregular</code></a> 类型能以前后自增运算符自增<br />
|
|
<span class="t-mark">(概念)</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>指定 <a href="cpp-iterator-weakly_incrementable.html"><code>weakly_incrementable</code></a> 类型上的自增操作保持相等性,而且该类型为 <a href="cpp-concepts-equality_comparable.html"><code>equality_comparable</code></a><br />
|
|
<span class="t-mark">(概念)</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>指定该类型对象可以自增且可以解引用<br />
|
|
<span class="t-mark">(概念)</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>指定类型为某个 <a href="cpp-iterator-input_or_output_iterator.html"><code>input_or_output_iterator</code></a> 类型的哨位类型<br />
|
|
<span class="t-mark">(概念)</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>指定可对一个迭代器和一个哨位应用 <code>-</code> 运算符,以在常数时间计算其距离<br />
|
|
<span class="t-mark">(概念)</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>指定类型为输入迭代器,即可读取其所引用的值,且可前/后自增<br />
|
|
<span class="t-mark">(概念)</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>指定类型为给定的值类型的输出迭代器,即可向其写入该类型的值,且可前/后自增<br />
|
|
<span class="t-mark">(概念)</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>指定 <a href="cpp-iterator-input_iterator.html"><code>input_iterator</code></a> 为向前迭代器,支持相等比较与多趟操作<br />
|
|
<span class="t-mark">(概念)</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>指定 <a href="cpp-iterator-forward_iterator.html"><code>forward_iterator</code></a> 为双向迭代器,支持向后移动<br />
|
|
<span class="t-mark">(概念)</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>指定 <a href="cpp-iterator-bidirectional_iterator.html"><code>bidirectional_iterator</code></a> 为随机访问迭代器,支持常数时间内的前进和下标访问<br />
|
|
<span class="t-mark">(概念)</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>指定 <a href="cpp-iterator-random_access_iterator.html"><code>random_access_iterator</code></a> 为连续迭代器,指代内存中连续相接的元素<br />
|
|
<span class="t-mark">(概念)</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">间接可调用概念</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>指定可调用类型能以解引用某个 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型的结果进行调用<br />
|
|
<span class="t-mark">(概念)</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>指定可调用类型,在以解引用一个 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型的结果进行调用时,满足 <a href="cpp-concepts-predicate.html"><code>predicate</code></a><br />
|
|
<span class="t-mark">(概念)</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>指定可调用类型,在以解引用两个 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型的结果进行调用时,满足 <a href="cpp-concepts-predicate.html"><code>predicate</code></a><br />
|
|
<span class="t-mark">(概念)</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>指定可调用类型,在以解引用两个 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型的结果进行调用时,满足 <a href="cpp-concepts-equivalence_relation.html"><code>equivalence_relation</code></a><br />
|
|
<span class="t-mark">(概念)</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>指定可调用类型,在以解引用两个 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型的结果进行调用时,满足 <a href="cpp-concepts-strict_weak_order.html"><code>strict_weak_order</code></a><br />
|
|
<span class="t-mark">(概念)</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">常用算法要求</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>指定可从 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型移动值给 <a href="cpp-iterator-indirectly_writable.html"><code>indirectly_writable</code></a> 类型<br />
|
|
<span class="t-mark">(概念)</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>指定可从 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型移动值给 <a href="cpp-iterator-indirectly_writable.html"><code>indirectly_writable</code></a> 类型,且该移动可以通过中间对象进行<br />
|
|
<span class="t-mark">(概念)</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>指定可从 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型复制值给 <a href="cpp-iterator-indirectly_writable.html"><code>indirectly_writable</code></a> 类型<br />
|
|
<span class="t-mark">(概念)</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>指定可从 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型复制值给 <a href="cpp-iterator-indirectly_writable.html"><code>indirectly_writable</code></a> 类型,且该复制可以通过中间对象进行<br />
|
|
<span class="t-mark">(概念)</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>指定能交换两个 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型所引用的值<br />
|
|
<span class="t-mark">(概念)</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>指定能比较两个 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型所引用的值<br />
|
|
<span class="t-mark">(概念)</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>指定在原位重排元素的算法的共同要求<br />
|
|
<span class="t-mark">(概念)</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>指定通过复制元素将已排序序列归并到输出序列中的算法的要求<br />
|
|
<span class="t-mark">(概念)</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>指定重排序列为有序序列的算法的共用要求<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h3><span class="mw-headline" id=".E7.B1.BB">类</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">算法工具</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>计算在解引用某组 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型的结果上调用可调用对象的结果<br />
|
|
<span class="t-mark">(别名模板)</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>用于对接受投影的算法指定约束的辅助模板<br />
|
|
<span class="t-mark">(类模板)</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">关联类型</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>计算 <a href="cpp-iterator-weakly_incrementable.html"><code>weakly_incrementable</code></a> 类型的差类型<br />
|
|
<span class="t-mark">(类模板)</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>计算 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型的值类型<br />
|
|
<span class="t-mark">(类模板)</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>计算迭代器的关联类型<br />
|
|
<span class="t-mark">(别名模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E5.8E.9F.E8.AF.AD">原语</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>为迭代器各项性质提供统一接口<br />
|
|
<span class="t-mark">(类模板)</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>用于指示迭代器类别的空类类型<br />
|
|
<span class="t-mark">(类)</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 中弃用)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>用于简化简单的迭代器的必要类型定义的基类<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E9.80.82.E9.85.8D.E5.99.A8">适配器</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>逆序遍历的迭代器适配器<br />
|
|
<span class="t-mark">(类模板)</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>解引用结果为右值引用的迭代器适配器<br />
|
|
<span class="t-mark">(类模板)</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>用于 <span class="t-lc"><a href="cpp-iterator-move_iterator.html">std::move_iterator</a></span> 的哨位适配器<br />
|
|
<span class="t-mark">(类模板)</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>适配一个迭代器类型及其哨位为一个公共迭代器类型<br />
|
|
<span class="t-mark">(类模板)</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>用于知晓其边界的迭代器的默认哨位<br />
|
|
<span class="t-mark">(类)</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>对到范围结尾距离进行跟踪的迭代器适配器<br />
|
|
<span class="t-mark">(类模板)</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>始终与任何 <a href="cpp-iterator-weakly_incrementable.html"><code>weakly_incrementable</code></a> 类型比较都不相等的哨位<br />
|
|
<span class="t-mark">(类)</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>用于在容器尾部插入的迭代器适配器<br />
|
|
<span class="t-mark">(类模板)</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>用于在容器头部插入的迭代器适配器<br />
|
|
<span class="t-mark">(类模板)</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>用于插入容器的迭代器适配器<br />
|
|
<span class="t-mark">(类模板)</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">流迭代器</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>从 <span class="t-lc"><a href="cpp-io-basic_istream.html">std::basic_istream</a></span> 读取的输入迭代器<br />
|
|
<span class="t-mark">(类模板)</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>写入 <span class="t-lc"><a href="cpp-io-basic_ostream.html">std::basic_ostream</a></span> 的输出迭代器<br />
|
|
<span class="t-mark">(类模板)</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>从 <span class="t-lc"><a href="cpp-io-basic_streambuf.html">std::basic_streambuf</a></span> 读取的输入迭代器<br />
|
|
<span class="t-mark">(类模板)</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>写入 <span class="t-lc"><a href="cpp-io-basic_streambuf.html">std::basic_streambuf</a></span> 的输出迭代器<br />
|
|
<span class="t-mark">(类模板)</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">定制点对象</span></h3>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc-header">
|
|
<td colspan="2">
|
|
<div>定义于命名空间 <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>将解引用迭代器的结果转型为其关联的右值引用类型<br />
|
|
<span class="t-mark">(定制点对象)</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>交换两个可解引用对象所引用的值<br />
|
|
<span class="t-mark">(定制点对象)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h3><span class="mw-headline" id=".E5.87.BD.E6.95.B0">函数</span></h3>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E9.80.82.E9.85.8D.E5.99.A8_2">适配器</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>创建拥有从实参推出的类型的 <span class="t-lc"><a href="cpp-iterator-reverse_iterator.html">std::reverse_iterator</a></span><br />
|
|
<span class="t-mark">(函数模板)</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>创建拥有从实参推出的类型的 <span class="t-lc"><a href="cpp-iterator-move_iterator.html">std::move_iterator</a></span><br />
|
|
<span class="t-mark">(函数模板)</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>创建拥有从实参推出的类型的 <span class="t-lc"><a href="cpp-iterator-front_insert_iterator.html">std::front_insert_iterator</a></span><br />
|
|
<span class="t-mark">(函数模板)</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>创建拥有从实参推出的类型的 <span class="t-lc"><a href="cpp-iterator-back_insert_iterator.html">std::back_insert_iterator</a></span><br />
|
|
<span class="t-mark">(函数模板)</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>创建拥有从实参推出的类型的 <span class="t-lc"><a href="cpp-iterator-insert_iterator.html">std::insert_iterator</a></span><br />
|
|
<span class="t-mark">(函数模板)</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">非成员函数</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<</span><span>operator<=</span><span>operator></span><span>operator>=</span><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><span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark-rev t-until-cxx20">(C++20 中移除)</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>比较底层迭代器<br />
|
|
<span class="t-mark">(函数模板)</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>令迭代器前进<br />
|
|
<span class="t-mark">(函数模板)</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>计算两个迭代器适配器间的距离<br />
|
|
<span class="t-mark">(函数模板)</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<</span><span>operator<=</span><span>operator></span><span>operator>=</span><span>operator<=></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>比较底层迭代器<br />
|
|
<span class="t-mark">(函数模板)</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>令迭代器前进<br />
|
|
<span class="t-mark">(函数模板)</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>计算两个迭代器适配器间的距离<br />
|
|
<span class="t-mark">(函数模板)</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 中移除)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>比较两个 <code>istream_iterator</code><br />
|
|
<span class="t-mark">(函数模板)</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 中移除)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>比较两个 <code>istreambuf_iterator</code><br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E6.93.8D.E4.BD.9C">操作</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>令迭代器前进给定的距离<br />
|
|
<span class="t-mark">(函数模板)</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>返回两个迭代器间的距离<br />
|
|
<span class="t-mark">(函数模板)</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>令迭代器自增<br />
|
|
<span class="t-mark">(函数模板)</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>令迭代器自减<br />
|
|
<span class="t-mark">(函数模板)</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>令迭代器前进给定的距离或到给定的边界<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>返回迭代器与哨位间的距离,或范围起始与结尾间的距离<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>自增迭代器给定的距离或到边界<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>自减迭代器给定的距离或到边界<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">范围访问</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>返回指向容器或数组起始的迭代器<br />
|
|
<span class="t-mark">(函数模板)</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>返回指向容器或数组结尾的迭代器<br />
|
|
<span class="t-mark">(函数模板)</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>返回指向一个容器或数组的逆向迭代器<br />
|
|
<span class="t-mark">(函数模板)</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>返回容器或数组的逆向尾迭代器<br />
|
|
<span class="t-mark">(函数模板)</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>返回容器或数组的大小<br />
|
|
<span class="t-mark">(函数模板)</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>检查容器是否为空<br />
|
|
<span class="t-mark">(函数模板)</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>获得指向底层数组的指针<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E6.A6.82.E8.A6.81">概要</span></h3>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="co2">#include <concepts></span>
|
|
|
|
<span class="kw1">namespace</span> std <span class="br0">{</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span> <span class="kw1">using</span> __with_reference <span class="sy1">=</span> T<span class="sy3">&</span><span class="sy4">;</span> <span class="co1">// 仅用于阐释</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span> concept __Referenceable <span class="co1">// 仅用于阐释</span>
|
|
<span class="sy1">=</span> requires <span class="br0">{</span> <span class="kw1">typename</span> __with_reference<span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span> concept __Dereferenceable <span class="co1">// 仅用于阐释</span>
|
|
<span class="sy1">=</span> requires<span class="br0">(</span>T<span class="sy3">&</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">></span> __Referenceable<span class="sy4">;</span> <span class="co1">// 不要求保持相等性</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 关联类型</span>
|
|
<span class="co1">// 可自增特征</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span><span class="sy1">></span> <span class="kw1">struct</span> incrementable_traits<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw1">using</span> iter_difference_t <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 间接可读特征</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span><span class="sy1">></span> <span class="kw1">struct</span> indirectly_readable_traits<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw1">using</span> iter_value_t <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 迭代器特征</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span> <span class="kw1">struct</span> iterator_traits<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span> requires is_object_v<span class="sy1"><</span>T<span class="sy1">></span> <span class="kw1">struct</span> iterator_traits<span class="sy1"><</span>T<span class="sy2">*</span><span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>__Dereferenceable T<span class="sy1">></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"><</span>T<span class="sy3">&</span><span class="sy1">></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">// 定制点</span>
|
|
<span class="kw1">inline</span> <span class="kw1">namespace</span> <span class="coMULTI">/* 未指明 */</span> <span class="br0">{</span>
|
|
<span class="co1">// ranges​::​iter_move</span>
|
|
<span class="kw1">inline</span> <span class="kw4">constexpr</span> <span class="coMULTI">/* 未指明 */</span> iter_move <span class="sy1">=</span> <span class="coMULTI">/* 未指明 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// ranges​::​iter_swap</span>
|
|
<span class="kw1">inline</span> <span class="kw4">constexpr</span> <span class="coMULTI">/* 未指明 */</span> iter_swap <span class="sy1">=</span> <span class="coMULTI">/* 未指明 */</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>__Dereferenceable T<span class="sy1">></span>
|
|
requires requires<span class="br0">(</span>T<span class="sy3">&</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">></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"><</span>T<span class="sy3">&</span><span class="sy1">></span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 迭代器概念</span>
|
|
<span class="co1">// 概念 indirectly_readable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> In<span class="sy1">></span>
|
|
concept indirectly_readable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>indirectly_readable T<span class="sy1">></span>
|
|
<span class="kw1">using</span> iter_common_reference_t <span class="sy1">=</span>
|
|
common_reference_t<span class="sy1"><</span>iter_reference_t<span class="sy1"><</span>T<span class="sy1">></span>, iter_value_t<span class="sy1"><</span>T<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 indirectly_writable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Out, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept indirectly_writable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 weakly_incrementable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept weakly_incrementable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 incrementable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept incrementable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 input_or_output_iterator</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept input_or_output_iterator <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 sentinel_for</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> S, <span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept sentinel_for <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 sized_sentinel_for</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> S, <span class="kw1">class</span> I<span class="sy1">></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"><</span><span class="kw1">class</span> S, <span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept sized_sentinel_for <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 input_iterator</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept input_iterator <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 output_iterator</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept output_iterator <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 forward_iterator</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept forward_iterator <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 bidirectional_iterator</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept bidirectional_iterator <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 random_access_iterator</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept random_access_iterator <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 contiguous_iterator</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept contiguous_iterator <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 间接可调用要求</span>
|
|
<span class="co1">// 间接可调用</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> F, <span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept indirectly_unary_invocable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> F, <span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept indirectly_regular_unary_invocable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> F, <span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept indirect_unary_predicate <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> F, <span class="kw1">class</span> I1, <span class="kw1">class</span> I2<span class="sy1">></span>
|
|
concept indirect_binary_predicate <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</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">></span>
|
|
concept indirect_equivalence_relation <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</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">></span>
|
|
concept indirect_strict_weak_order <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> F, <span class="kw1">class</span>... <span class="me1">Is</span><span class="sy1">></span>
|
|
requires <span class="br0">(</span>indirectly_readable<span class="sy1"><</span>Is<span class="sy1">></span> <span class="sy3">&&</span> ...<span class="br0">)</span> <span class="sy3">&&</span> invocable<span class="sy1"><</span>F, iter_reference_t<span class="sy1"><</span>Is<span class="sy1">></span>...<span class="sy1">></span>
|
|
<span class="kw1">using</span> indirect_result_t <span class="sy1">=</span> invoke_result_t<span class="sy1"><</span>F, iter_reference_t<span class="sy1"><</span>Is<span class="sy1">></span>...<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// projected</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>indirectly_readable I, indirectly_regular_unary_invocable<span class="sy1"><</span>I<span class="sy1">></span> Proj<span class="sy1">></span>
|
|
<span class="kw1">struct</span> projected<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>weakly_incrementable I, <span class="kw1">class</span> Proj<span class="sy1">></span>
|
|
<span class="kw1">struct</span> incrementable_traits<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 常用算法要求</span>
|
|
<span class="co1">// 概念 indirectly_movable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">></span>
|
|
concept indirectly_movable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">></span>
|
|
concept indirectly_movable_storable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 indirectly_copyable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">></span>
|
|
concept indirectly_copyable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">></span>
|
|
concept indirectly_copyable_storable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 indirectly_swappable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2 <span class="sy1">=</span> I1<span class="sy1">></span>
|
|
concept indirectly_swappable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 indirectly_comparable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</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">></span>
|
|
concept indirectly_comparable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 permutable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept permutable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 mergeable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</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">></span>
|
|
concept mergeable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 sortable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</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">></span>
|
|
concept sortable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 原语</span>
|
|
<span class="co1">// 迭代器标签</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">// 迭代器操作</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter, <span class="kw1">class</span> Distance<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span>
|
|
advance<span class="br0">(</span>InputIter<span class="sy3">&</span> i, Distance n<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> InputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw1">typename</span> iterator_traits<span class="sy1"><</span>InputIter<span class="sy1">></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"><</span><span class="kw1">class</span> InputIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> InputIter
|
|
next<span class="br0">(</span>InputIter x, <span class="kw1">typename</span> iterator_traits<span class="sy1"><</span>InputIter<span class="sy1">></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"><</span><span class="kw1">class</span> BidirectionalIter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> BidirectionalIter
|
|
prev<span class="br0">(</span>BidirectionalIter x,
|
|
<span class="kw1">typename</span> iterator_traits<span class="sy1"><</span>BidirectionalIter<span class="sy1">></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">// 范围迭代器操作</span>
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="co1">// ranges​::​advance</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_or_output_iterator I<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> advance<span class="br0">(</span>I<span class="sy3">&</span> i, iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> n<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_or_output_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">void</span> advance<span class="br0">(</span>I<span class="sy3">&</span> i, S bound<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_or_output_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> advance<span class="br0">(</span>I<span class="sy3">&</span> i, iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> n, S bound<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// ranges​::​distance</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_or_output_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> iter_difference_t<span class="sy1"><</span>I<span class="sy1">></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"><</span>range R<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> range_difference_t<span class="sy1"><</span>R<span class="sy1">></span> distance<span class="br0">(</span>R<span class="sy3">&&</span> r<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// ranges​::​next</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_or_output_iterator I<span class="sy1">></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"><</span>input_or_output_iterator I<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I next<span class="br0">(</span>I x, iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> n<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_or_output_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S<span class="sy1">></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"><</span>input_or_output_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I next<span class="br0">(</span>I x, iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> n, S bound<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// ranges​::​prev</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_iterator I<span class="sy1">></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"><</span>bidirectional_iterator I<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I prev<span class="br0">(</span>I x, iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> n<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>bidirectional_iterator I<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> I prev<span class="br0">(</span>I x, iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> n, I bound<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="co1">// 预定义迭代器与哨位</span>
|
|
<span class="co1">// 逆向迭代器</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter<span class="sy1">></span> <span class="kw1">class</span> reverse_iterator<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x,
|
|
<span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x,
|
|
<span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x,
|
|
<span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x,
|
|
<span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x,
|
|
<span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x,
|
|
<span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, three_way_comparable_with<span class="sy1"><</span>Iter1<span class="sy1">></span> Iter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> compare_three_way_result_t<span class="sy1"><</span>Iter1, Iter2<span class="sy1">></span>
|
|
operator<span class="sy1"><=></span><span class="br0">(</span><span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x, <span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x,
|
|
<span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> Iter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> reverse_iterator<span class="sy1"><</span>Iter<span class="sy1">></span>
|
|
operator<span class="sy2">+</span><span class="br0">(</span>
|
|
<span class="kw1">typename</span> reverse_iterator<span class="sy1"><</span>Iter<span class="sy1">></span><span class="sy4">::</span><span class="me2">difference_type</span> n,
|
|
<span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>Iter<span class="sy1">></span><span class="sy3">&</span> x<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> reverse_iterator<span class="sy1"><</span>Iter<span class="sy1">></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"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></span>
|
|
requires <span class="br0">(</span><span class="sy3">!</span>sized_sentinel_for<span class="sy1"><</span>Iter1, Iter2<span class="sy1">></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"><</span>reverse_iterator<span class="sy1"><</span>Iter1<span class="sy1">></span>,
|
|
reverse_iterator<span class="sy1"><</span>Iter2<span class="sy1">>></span> <span class="sy1">=</span> <span class="kw2">true</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 插入迭代器</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Container<span class="sy1">></span> <span class="kw1">class</span> back_insert_iterator<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Container<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> back_insert_iterator<span class="sy1"><</span>Container<span class="sy1">></span> back_inserter<span class="br0">(</span>Container<span class="sy3">&</span> x<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Container<span class="sy1">></span> <span class="kw1">class</span> front_insert_iterator<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Container<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> front_insert_iterator<span class="sy1"><</span>Container<span class="sy1">></span> front_inserter<span class="br0">(</span>Container<span class="sy3">&</span> x<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Container<span class="sy1">></span> <span class="kw1">class</span> insert_iterator<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Container<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> insert_iterator<span class="sy1"><</span>Container<span class="sy1">></span>
|
|
inserter<span class="br0">(</span>Container<span class="sy3">&</span> x, ranges<span class="sy4">::</span><span class="me2">iterator_t</span><span class="sy1"><</span>Container<span class="sy1">></span> i<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 移动迭代器与哨位</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter<span class="sy1">></span> <span class="kw1">class</span> move_iterator<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x, <span class="kw4">const</span> move_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x, <span class="kw4">const</span> move_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x, <span class="kw4">const</span> move_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x, <span class="kw4">const</span> move_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x, <span class="kw4">const</span> move_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, three_way_comparable_with<span class="sy1"><</span>Iter1<span class="sy1">></span> Iter2<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> compare_three_way_result_t<span class="sy1"><</span>Iter1, Iter2<span class="sy1">></span>
|
|
operator<span class="sy1"><=></span><span class="br0">(</span><span class="kw4">const</span> move_iterator<span class="sy1"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x, <span class="kw4">const</span> move_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter1, <span class="kw1">class</span> Iter2<span class="sy1">></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"><</span>Iter1<span class="sy1">></span><span class="sy3">&</span> x,
|
|
<span class="kw4">const</span> move_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> Iter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> move_iterator<span class="sy1"><</span>Iter<span class="sy1">></span> operator<span class="sy2">+</span><span class="br0">(</span>
|
|
<span class="kw1">typename</span> move_iterator<span class="sy1"><</span>Iter<span class="sy1">></span><span class="sy4">::</span><span class="me2">difference_type</span> n, <span class="kw4">const</span> move_iterator<span class="sy1"><</span>Iter<span class="sy1">></span><span class="sy3">&</span> x<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Iter<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> move_iterator<span class="sy1"><</span>Iter<span class="sy1">></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"><</span>semiregular S<span class="sy1">></span> <span class="kw1">class</span> move_sentinel<span class="sy4">;</span>
|
|
|
|
<span class="co1">// 公共迭代器</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_or_output_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S<span class="sy1">></span>
|
|
requires <span class="br0">(</span><span class="sy3">!</span>same_as<span class="sy1"><</span>I, S<span class="sy1">></span><span class="br0">)</span>
|
|
<span class="kw1">class</span> common_iterator<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> S<span class="sy1">></span>
|
|
<span class="kw1">struct</span> incrementable_traits<span class="sy1"><</span>common_iterator<span class="sy1"><</span>I, S<span class="sy1">>></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, <span class="kw1">class</span> S<span class="sy1">></span>
|
|
<span class="kw1">struct</span> iterator_traits<span class="sy1"><</span>common_iterator<span class="sy1"><</span>I, S<span class="sy1">>></span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 默认哨位</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">// 计数迭代器</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_or_output_iterator I<span class="sy1">></span> <span class="kw1">class</span> counted_iterator<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
<span class="kw1">struct</span> incrementable_traits<span class="sy1"><</span>counted_iterator<span class="sy1"><</span>I<span class="sy1">>></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I<span class="sy1">></span>
|
|
<span class="kw1">struct</span> iterator_traits<span class="sy1"><</span>counted_iterator<span class="sy1"><</span>I<span class="sy1">>></span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 不可达哨位</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">// 流迭代器</span>
|
|
<span class="kw1">template</span><span class="sy1"><</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"><</span>charT<span class="sy1">></span>,
|
|
<span class="kw1">class</span> Distance <span class="sy1">=</span> ptrdiff_t<span class="sy1">></span>
|
|
<span class="kw1">class</span> istream_iterator<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</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">></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"><</span>T,charT,traits,Distance<span class="sy1">></span><span class="sy3">&</span> x,
|
|
<span class="kw4">const</span> istream_iterator<span class="sy1"><</span>T,charT,traits,Distance<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</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"><</span>charT<span class="sy1">>></span>
|
|
<span class="kw1">class</span> ostream_iterator<span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> charT, <span class="kw1">class</span> traits <span class="sy1">=</span> char_traits<span class="sy1"><</span>charT<span class="sy1">>></span>
|
|
<span class="kw1">class</span> istreambuf_iterator<span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> charT, <span class="kw1">class</span> traits<span class="sy1">></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"><</span>charT,traits<span class="sy1">></span><span class="sy3">&</span> a,
|
|
<span class="kw4">const</span> istreambuf_iterator<span class="sy1"><</span>charT,traits<span class="sy1">></span><span class="sy3">&</span> b<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> charT, <span class="kw1">class</span> traits <span class="sy1">=</span> char_traits<span class="sy1"><</span>charT<span class="sy1">>></span>
|
|
<span class="kw1">class</span> ostreambuf_iterator<span class="sy4">;</span>
|
|
|
|
<span class="co1">// 范围访问</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> C<span class="sy1">></span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> begin<span class="br0">(</span>C<span class="sy3">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> C<span class="sy1">></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">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> C<span class="sy1">></span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> end<span class="br0">(</span>C<span class="sy3">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> C<span class="sy1">></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">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> T, size_t N<span class="sy1">></span> <span class="kw4">constexpr</span> T<span class="sy2">*</span> begin<span class="br0">(</span>T <span class="br0">(</span><span class="sy3">&</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"><</span><span class="kw1">class</span> T, size_t N<span class="sy1">></span> <span class="kw4">constexpr</span> T<span class="sy2">*</span> end<span class="br0">(</span>T <span class="br0">(</span><span class="sy3">&</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"><</span><span class="kw1">class</span> C<span class="sy1">></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">&</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">></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"><</span><span class="kw1">class</span> C<span class="sy1">></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">&</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">></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"><</span><span class="kw1">class</span> C<span class="sy1">></span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> rbegin<span class="br0">(</span>C<span class="sy3">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> C<span class="sy1">></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">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> C<span class="sy1">></span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> rend<span class="br0">(</span>C<span class="sy3">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> C<span class="sy1">></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">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> T, size_t N<span class="sy1">></span> <span class="kw4">constexpr</span> reverse_iterator<span class="sy1"><</span>T<span class="sy2">*</span><span class="sy1">></span> rbegin<span class="br0">(</span>T <span class="br0">(</span><span class="sy3">&</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"><</span><span class="kw1">class</span> T, size_t N<span class="sy1">></span> <span class="kw4">constexpr</span> reverse_iterator<span class="sy1"><</span>T<span class="sy2">*</span><span class="sy1">></span> rend<span class="br0">(</span>T <span class="br0">(</span><span class="sy3">&</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"><</span><span class="kw1">class</span> E<span class="sy1">></span> <span class="kw4">constexpr</span> reverse_iterator<span class="sy1"><</span><span class="kw4">const</span> E<span class="sy2">*</span><span class="sy1">></span> rbegin<span class="br0">(</span>initializer_list<span class="sy1"><</span>E<span class="sy1">></span> il<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> E<span class="sy1">></span> <span class="kw4">constexpr</span> reverse_iterator<span class="sy1"><</span><span class="kw4">const</span> E<span class="sy2">*</span><span class="sy1">></span> rend<span class="br0">(</span>initializer_list<span class="sy1"><</span>E<span class="sy1">></span> il<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> C<span class="sy1">></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">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> C<span class="sy1">></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">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> C<span class="sy1">></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">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> T, size_t N<span class="sy1">></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">&</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"><</span><span class="kw1">class</span> C<span class="sy1">></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">&</span> c<span class="br0">)</span>
|
|
<span class="sy2">-</span><span class="sy1">></span> common_type_t<span class="sy1"><</span>ptrdiff_t, make_signed_t<span class="sy1"><</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">>></span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, ptrdiff_t N<span class="sy1">></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">&</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"><</span><span class="kw1">class</span> C<span class="sy1">></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">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> T, size_t N<span class="sy1">></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">&</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"><</span><span class="kw1">class</span> E<span class="sy1">></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"><</span>E<span class="sy1">></span> il<span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> C<span class="sy1">></span> <span class="kw4">constexpr</span> <span class="kw4">auto</span> data<span class="br0">(</span>C<span class="sy3">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> C<span class="sy1">></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">&</span> c<span class="br0">)</span> <span class="sy2">-</span><span class="sy1">></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"><</span><span class="kw1">class</span> T, size_t N<span class="sy1">></span> <span class="kw4">constexpr</span> T<span class="sy2">*</span> data<span class="br0">(</span>T <span class="br0">(</span><span class="sy3">&</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"><</span><span class="kw1">class</span> E<span class="sy1">></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"><</span>E<span class="sy1">></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">概念 <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"><</span><span class="kw1">class</span> In<span class="sy1">></span>
|
|
concept __IndirectlyReadableImpl <span class="sy1">=</span> <span class="co1">// 仅用于阐释</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"><</span>In<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw1">typename</span> iter_reference_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw1">typename</span> iter_rvalue_reference_t<span class="sy1"><</span>In<span class="sy1">></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">></span> same_as<span class="sy1"><</span>iter_reference_t<span class="sy1"><</span>In<span class="sy1">>></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">></span> same_as<span class="sy1"><</span>iter_rvalue_reference_t<span class="sy1"><</span>In<span class="sy1">>></span>
|
|
<span class="br0">}</span> <span class="sy3">&&</span>
|
|
common_reference_with<span class="sy1"><</span>iter_reference_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy3">&&</span>, iter_value_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
common_reference_with<span class="sy1"><</span>iter_reference_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy3">&&</span>, iter_rvalue_reference_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy3">&&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
common_reference_with<span class="sy1"><</span>iter_rvalue_reference_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy3">&&</span>, <span class="kw4">const</span> iter_value_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> In<span class="sy1">></span>
|
|
concept indirectly_readable <span class="sy1">=</span>
|
|
__IndirectlyReadableImpl<span class="sy1"><</span>remove_cvref_t<span class="sy1"><</span>In<span class="sy1">>></span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_indirectly_writable">概念 <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"><</span><span class="kw1">class</span> Out, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept indirectly_writable <span class="sy1">=</span>
|
|
requires<span class="br0">(</span>Out<span class="sy3">&&</span> o, T<span class="sy3">&&</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"><</span>T<span class="sy1">></span><span class="br0">(</span>t<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 不要求保持相等性</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"><</span>Out<span class="sy1">></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"><</span>T<span class="sy1">></span><span class="br0">(</span>t<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="co1">// 不要求保持相等性</span>
|
|
<span class="kw1">const_cast</span><span class="sy1"><</span><span class="kw4">const</span> iter_reference_t<span class="sy1"><</span>Out<span class="sy1">></span><span class="sy3">&&</span><span class="sy1">></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"><</span>T<span class="sy1">></span><span class="br0">(</span>t<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 不要求保持相等性</span>
|
|
<span class="kw1">const_cast</span><span class="sy1"><</span><span class="kw4">const</span> iter_reference_t<span class="sy1"><</span>Out<span class="sy1">></span><span class="sy3">&&</span><span class="sy1">></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"><</span>Out<span class="sy1">></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"><</span>T<span class="sy1">></span><span class="br0">(</span>t<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 不要求保持相等性</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">概念 <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"><</span><span class="kw1">class</span> T<span class="sy1">></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">/* 见描述 */</span><span class="sy4">;</span> <span class="co1">// 仅用于阐释</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></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">// 仅用于阐释</span>
|
|
<span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept weakly_incrementable <span class="sy1">=</span>
|
|
default_initializable<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span> movable<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</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"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
requires __is_signed_integer_like<span class="sy1"><</span>iter_difference_t<span class="sy1"><</span>I<span class="sy1">>></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">></span> same_as<span class="sy1"><</span>I<span class="sy3">&</span><span class="sy1">></span><span class="sy4">;</span> <span class="co1">// 不要求保持相等性</span>
|
|
i<span class="sy2">++</span><span class="sy4">;</span> <span class="co1">// 不要求保持相等性</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">概念 <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"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept incrementable <span class="sy1">=</span>
|
|
regular<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
weakly_incrementable<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</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">></span> same_as<span class="sy1"><</span>I<span class="sy1">></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">概念 <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"><</span><span class="kw1">class</span> I<span class="sy1">></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">></span> can<span class="sy2">-</span>reference<span class="sy4">;</span>
|
|
<span class="br0">}</span> <span class="sy3">&&</span>
|
|
weakly_incrementable<span class="sy1"><</span>I<span class="sy1">></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">概念 <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"><</span><span class="kw1">class</span> S, <span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept sentinel_for <span class="sy1">=</span>
|
|
semiregular<span class="sy1"><</span>S<span class="sy1">></span> <span class="sy3">&&</span>
|
|
input_or_output_iterator<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
__WeaklyEqualityComparableWith<span class="sy1"><</span>S, I<span class="sy1">></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">概念 <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"><</span><span class="kw1">class</span> S, <span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept sized_sentinel_for <span class="sy1">=</span>
|
|
sentinel_for<span class="sy1"><</span>S, I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
<span class="sy3">!</span>disable_sized_sentinel<span class="sy1"><</span>remove_cv_t<span class="sy1"><</span>S<span class="sy1">></span>, remove_cv_t<span class="sy1"><</span>I<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
requires<span class="br0">(</span><span class="kw4">const</span> I<span class="sy3">&</span> i, <span class="kw4">const</span> S<span class="sy3">&</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">></span> same_as<span class="sy1"><</span>iter_difference_t<span class="sy1"><</span>I<span class="sy1">>></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">></span> same_as<span class="sy1"><</span>iter_difference_t<span class="sy1"><</span>I<span class="sy1">>></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">概念 <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"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept input_iterator <span class="sy1">=</span>
|
|
input_or_output_iterator<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_readable<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</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">&&</span>
|
|
derived_from<span class="sy1"><</span><span class="coMULTI">/*ITER_CONCEPT*/</span><span class="br0">(</span>I<span class="br0">)</span>, input_iterator_tag<span class="sy1">></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">概念 <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"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept output_iterator <span class="sy1">=</span>
|
|
input_or_output_iterator<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_writable<span class="sy1"><</span>I, T<span class="sy1">></span> <span class="sy3">&&</span>
|
|
requires<span class="br0">(</span>I i, T<span class="sy3">&&</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"><</span>T<span class="sy1">></span><span class="br0">(</span>t<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 不要求保持相等性</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">概念 <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"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept forward_iterator <span class="sy1">=</span>
|
|
input_iterator<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
derived_from<span class="sy1"><</span><span class="coMULTI">/*ITER_CONCEPT*/</span><span class="br0">(</span>I<span class="br0">)</span>, forward_iterator_tag<span class="sy1">></span> <span class="sy3">&&</span>
|
|
incrementable<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
sentinel_for<span class="sy1"><</span>I, I<span class="sy1">></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">概念 <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"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept bidirectional_iterator <span class="sy1">=</span>
|
|
forward_iterator<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
derived_from<span class="sy1"><</span><span class="coMULTI">/*ITER_CONCEPT*/</span><span class="br0">(</span>I<span class="br0">)</span>, bidirectional_iterator_tag<span class="sy1">></span> <span class="sy3">&&</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">></span> same_as<span class="sy1"><</span>I<span class="sy3">&</span><span class="sy1">></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">></span> same_as<span class="sy1"><</span>I<span class="sy1">></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">概念 <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"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept random_access_iterator <span class="sy1">=</span>
|
|
bidirectional_iterator<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
derived_from<span class="sy1"><</span><span class="coMULTI">/*ITER_CONCEPT*/</span><span class="br0">(</span>I<span class="br0">)</span>, random_access_iterator_tag<span class="sy1">></span> <span class="sy3">&&</span>
|
|
totally_ordered<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
sized_sentinel_for<span class="sy1"><</span>I, I<span class="sy1">></span> <span class="sy3">&&</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"><</span>I<span class="sy1">></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">></span> same_as<span class="sy1"><</span>I<span class="sy3">&</span><span class="sy1">></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">></span> same_as<span class="sy1"><</span>I<span class="sy1">></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">></span> same_as<span class="sy1"><</span>I<span class="sy1">></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">></span> same_as<span class="sy1"><</span>I<span class="sy3">&</span><span class="sy1">></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">></span> same_as<span class="sy1"><</span>I<span class="sy1">></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">></span> same_as<span class="sy1"><</span>iter_reference_t<span class="sy1"><</span>I<span class="sy1">>></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">概念 <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"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept contiguous_iterator <span class="sy1">=</span>
|
|
random_access_iterator<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
derived_from<span class="sy1"><</span><span class="coMULTI">/*ITER_CONCEPT*/</span><span class="br0">(</span>I<span class="br0">)</span>, contiguous_iterator_tag<span class="sy1">></span> <span class="sy3">&&</span>
|
|
is_lvalue_reference_v<span class="sy1"><</span>iter_reference_t<span class="sy1"><</span>I<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
same_as<span class="sy1"><</span>iter_value_t<span class="sy1"><</span>I<span class="sy1">></span>, remove_cvref_t<span class="sy1"><</span>iter_reference_t<span class="sy1"><</span>I<span class="sy1">>>></span> <span class="sy3">&&</span>
|
|
requires<span class="br0">(</span><span class="kw4">const</span> I<span class="sy3">&</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">></span> same_as<span class="sy1"><</span>add_pointer_t<span class="sy1"><</span>iter_reference_t<span class="sy1"><</span>I<span class="sy1">>>></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">概念 <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"><</span><span class="kw1">class</span> F, <span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept indirectly_unary_invocable <span class="sy1">=</span>
|
|
indirectly_readable<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
copy_constructible<span class="sy1"><</span>F<span class="sy1">></span> <span class="sy3">&&</span>
|
|
invocable<span class="sy1"><</span>F<span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
invocable<span class="sy1"><</span>F<span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
invocable<span class="sy1"><</span>F<span class="sy3">&</span>, iter_common_reference_t<span class="sy1"><</span>I<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
common_reference_with<span class="sy1"><</span>
|
|
invoke_result_t<span class="sy1"><</span>F<span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span>,
|
|
invoke_result_t<span class="sy1"><</span>F<span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I<span class="sy1">>>></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">概念 <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"><</span><span class="kw1">class</span> F, <span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept indirectly_regular_unary_invocable <span class="sy1">=</span>
|
|
indirectly_readable<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
copy_constructible<span class="sy1"><</span>F<span class="sy1">></span> <span class="sy3">&&</span>
|
|
regular_invocable<span class="sy1"><</span>F<span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
regular_invocable<span class="sy1"><</span>F<span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
regular_invocable<span class="sy1"><</span>F<span class="sy3">&</span>, iter_common_reference_t<span class="sy1"><</span>I<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
common_reference_with<span class="sy1"><</span>
|
|
invoke_result_t<span class="sy1"><</span>F<span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span>,
|
|
invoke_result_t<span class="sy1"><</span>F<span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I<span class="sy1">>>></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">概念 <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"><</span><span class="kw1">class</span> F, <span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept indirect_unary_predicate <span class="sy1">=</span>
|
|
indirectly_readable<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
copy_constructible<span class="sy1"><</span>F<span class="sy1">></span> <span class="sy3">&&</span>
|
|
predicate<span class="sy1"><</span>F<span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
predicate<span class="sy1"><</span>F<span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
predicate<span class="sy1"><</span>F<span class="sy3">&</span>, iter_common_reference_t<span class="sy1"><</span>I<span class="sy1">>></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">概念 <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"><</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">></span>
|
|
concept indirect_binary_predicate <span class="sy1">=</span>
|
|
indirectly_readable<span class="sy1"><</span>I1<span class="sy1">></span> <span class="sy3">&&</span> indirectly_readable<span class="sy1"><</span>I2<span class="sy1">></span> <span class="sy3">&&</span>
|
|
copy_constructible<span class="sy1"><</span>F<span class="sy1">></span> <span class="sy3">&&</span>
|
|
predicate<span class="sy1"><</span>F<span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I1<span class="sy1">></span><span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I2<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
predicate<span class="sy1"><</span>F<span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I1<span class="sy1">></span><span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I2<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
predicate<span class="sy1"><</span>F<span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I1<span class="sy1">></span>, iter_value_t<span class="sy1"><</span>I2<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
predicate<span class="sy1"><</span>F<span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I1<span class="sy1">></span>, iter_reference_t<span class="sy1"><</span>I2<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
predicate<span class="sy1"><</span>F<span class="sy3">&</span>, iter_common_reference_t<span class="sy1"><</span>I1<span class="sy1">></span>, iter_common_reference_t<span class="sy1"><</span>I2<span class="sy1">>></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">概念 <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"><</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">></span>
|
|
concept indirect_equivalence_relation <span class="sy1">=</span>
|
|
indirectly_readable<span class="sy1"><</span>I1<span class="sy1">></span> <span class="sy3">&&</span> indirectly_readable<span class="sy1"><</span>I2<span class="sy1">></span> <span class="sy3">&&</span>
|
|
copy_constructible<span class="sy1"><</span>F<span class="sy1">></span> <span class="sy3">&&</span>
|
|
equivalence_relation<span class="sy1"><</span>F<span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I1<span class="sy1">></span><span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I2<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
equivalence_relation<span class="sy1"><</span>F<span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I1<span class="sy1">></span><span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I2<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
equivalence_relation<span class="sy1"><</span>F<span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I1<span class="sy1">></span>, iter_value_t<span class="sy1"><</span>I2<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
equivalence_relation<span class="sy1"><</span>F<span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I1<span class="sy1">></span>, iter_reference_t<span class="sy1"><</span>I2<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
equivalence_relation<span class="sy1"><</span>F<span class="sy3">&</span>, iter_common_reference_t<span class="sy1"><</span>I1<span class="sy1">></span>, iter_common_reference_t<span class="sy1"><</span>I2<span class="sy1">>></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">概念 <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"><</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">></span>
|
|
concept indirect_strict_weak_order <span class="sy1">=</span>
|
|
indirectly_readable<span class="sy1"><</span>I1<span class="sy1">></span> <span class="sy3">&&</span> indirectly_readable<span class="sy1"><</span>I2<span class="sy1">></span> <span class="sy3">&&</span>
|
|
copy_constructible<span class="sy1"><</span>F<span class="sy1">></span> <span class="sy3">&&</span>
|
|
strict_weak_order<span class="sy1"><</span>F<span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I1<span class="sy1">></span><span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I2<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
strict_weak_order<span class="sy1"><</span>F<span class="sy3">&</span>, iter_value_t<span class="sy1"><</span>I1<span class="sy1">></span><span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I2<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
strict_weak_order<span class="sy1"><</span>F<span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I1<span class="sy1">></span>, iter_value_t<span class="sy1"><</span>I2<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
strict_weak_order<span class="sy1"><</span>F<span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>I1<span class="sy1">></span>, iter_reference_t<span class="sy1"><</span>I2<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
strict_weak_order<span class="sy1"><</span>F<span class="sy3">&</span>, iter_common_reference_t<span class="sy1"><</span>I1<span class="sy1">></span>, iter_common_reference_t<span class="sy1"><</span>I2<span class="sy1">>></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">概念 <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"><</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">></span>
|
|
concept indirectly_movable <span class="sy1">=</span>
|
|
indirectly_readable<span class="sy1"><</span>In<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_writable<span class="sy1"><</span>Out, iter_rvalue_reference_t<span class="sy1"><</span>In<span class="sy1">>></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">概念 <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"><</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">></span>
|
|
concept indirectly_movable_storable <span class="sy1">=</span>
|
|
indirectly_movable<span class="sy1"><</span>In, Out<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_writable<span class="sy1"><</span>Out, iter_value_t<span class="sy1"><</span>In<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
movable<span class="sy1"><</span>iter_value_t<span class="sy1"><</span>In<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
constructible_from<span class="sy1"><</span>iter_value_t<span class="sy1"><</span>In<span class="sy1">></span>, iter_rvalue_reference_t<span class="sy1"><</span>In<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
assignable_from<span class="sy1"><</span>iter_value_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy3">&</span>, iter_rvalue_reference_t<span class="sy1"><</span>In<span class="sy1">>></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">概念 <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"><</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">></span>
|
|
concept indirectly_copyable <span class="sy1">=</span>
|
|
indirectly_readable<span class="sy1"><</span>In<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_writable<span class="sy1"><</span>Out, iter_reference_t<span class="sy1"><</span>In<span class="sy1">>></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">概念 <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"><</span><span class="kw1">class</span> In, <span class="kw1">class</span> Out<span class="sy1">></span>
|
|
concept indirectly_copyable_storable <span class="sy1">=</span>
|
|
indirectly_copyable<span class="sy1"><</span>In, Out<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_writable<span class="sy1"><</span>Out, iter_value_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_writable<span class="sy1"><</span>Out, <span class="kw4">const</span> iter_value_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_writable<span class="sy1"><</span>Out, iter_value_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy3">&&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_writable<span class="sy1"><</span>Out, <span class="kw4">const</span> iter_value_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy3">&&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
copyable<span class="sy1"><</span>iter_value_t<span class="sy1"><</span>In<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
constructible_from<span class="sy1"><</span>iter_value_t<span class="sy1"><</span>In<span class="sy1">></span>, iter_reference_t<span class="sy1"><</span>In<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
assignable_from<span class="sy1"><</span>iter_value_t<span class="sy1"><</span>In<span class="sy1">></span><span class="sy3">&</span>, iter_reference_t<span class="sy1"><</span>In<span class="sy1">>></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">概念 <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"><</span><span class="kw1">class</span> I1, <span class="kw1">class</span> I2 <span class="sy1">=</span> I1<span class="sy1">></span>
|
|
concept indirectly_swappable <span class="sy1">=</span>
|
|
indirectly_readable<span class="sy1"><</span>I1<span class="sy1">></span> <span class="sy3">&&</span> indirectly_readable<span class="sy1"><</span>I2<span class="sy1">></span> <span class="sy3">&&</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">概念 <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"><</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">></span>
|
|
concept indirectly_comparable <span class="sy1">=</span>
|
|
indirect_relation<span class="sy1"><</span>R, projected<span class="sy1"><</span>I1, P1<span class="sy1">></span>, projected<span class="sy1"><</span>I2, P2<span class="sy1">>></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">概念 <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"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
concept permutable <span class="sy1">=</span>
|
|
forward_iterator<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_movable_storable<span class="sy1"><</span>I, I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_swappable<span class="sy1"><</span>I, I<span class="sy1">></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">概念 <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"><</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">></span>
|
|
concept mergeable <span class="sy1">=</span>
|
|
input_iterator<span class="sy1"><</span>I1<span class="sy1">></span> <span class="sy3">&&</span>
|
|
input_iterator<span class="sy1"><</span>I2<span class="sy1">></span> <span class="sy3">&&</span>
|
|
weakly_incrementable<span class="sy1"><</span>Out<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_copyable<span class="sy1"><</span>I1, Out<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirectly_copyable<span class="sy1"><</span>I2, Out<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirect_strict_weak_order<span class="sy1"><</span>R, projected<span class="sy1"><</span>I1, P1<span class="sy1">></span>, projected<span class="sy1"><</span>I2, P2<span class="sy1">>></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">概念 <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"><</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">></span>
|
|
concept sortable <span class="sy1">=</span>
|
|
permutable<span class="sy1"><</span>I<span class="sy1">></span> <span class="sy3">&&</span>
|
|
indirect_strict_weak_order<span class="sy1"><</span>R, projected<span class="sy1"><</span>I, P<span class="sy1">>></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">类模板 <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"><</span><span class="kw1">class</span><span class="sy1">></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"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
requires is_object_v<span class="sy1"><</span>T<span class="sy1">></span>
|
|
<span class="kw1">struct</span> incrementable_traits<span class="sy1"><</span>T<span class="sy2">*</span><span class="sy1">></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"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
<span class="kw1">struct</span> incrementable_traits<span class="sy1"><</span><span class="kw4">const</span> I<span class="sy1">></span>
|
|
<span class="sy4">:</span> incrementable_traits<span class="sy1"><</span>I<span class="sy1">></span> <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></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"><</span>T<span class="sy1">></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"><</span><span class="kw1">class</span> T<span class="sy1">></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">&&</span>
|
|
requires<span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> a, <span class="kw4">const</span> T<span class="sy3">&</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">></span> integral<span class="sy4">;</span> <span class="br0">}</span><span class="br0">)</span>
|
|
<span class="kw1">struct</span> incrementable_traits<span class="sy1"><</span>T<span class="sy1">></span> <span class="br0">{</span>
|
|
<span class="kw1">using</span> difference_type <span class="sy1">=</span> make_signed_t<span class="sy1"><</span>decltype<span class="br0">(</span>declval<span class="sy1"><</span>T<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span> <span class="sy2">-</span> declval<span class="sy1"><</span>T<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw1">using</span> iter_difference_t <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</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">类模板 <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"><</span><span class="kw1">class</span><span class="sy1">></span> <span class="kw1">struct</span> __cond_value_type <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// 仅用于阐释</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
requires is_object_v<span class="sy1"><</span>T<span class="sy1">></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"><</span>T<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span><span class="sy1">></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"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw1">struct</span> indirectly_readable_traits<span class="sy1"><</span>T<span class="sy2">*</span><span class="sy1">></span>
|
|
<span class="sy4">:</span> __cond_value_type<span class="sy1"><</span>T<span class="sy1">></span> <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
requires is_array_v<span class="sy1"><</span>I<span class="sy1">></span>
|
|
<span class="kw1">struct</span> indirectly_readable_traits<span class="sy1"><</span>I<span class="sy1">></span> <span class="br0">{</span>
|
|
<span class="kw1">using</span> value_type <span class="sy1">=</span> remove_cv_t<span class="sy1"><</span>remove_extent_t<span class="sy1"><</span>I<span class="sy1">>></span><span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
<span class="kw1">struct</span> indirectly_readable_traits<span class="sy1"><</span><span class="kw4">const</span> I<span class="sy1">></span>
|
|
<span class="sy4">:</span> indirectly_readable_traits<span class="sy1"><</span>I<span class="sy1">></span> <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></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"><</span>T<span class="sy1">></span>
|
|
<span class="sy4">:</span> __cond_value_type<span class="sy1"><</span><span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">value_type</span><span class="sy1">></span> <span class="br0">{</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></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"><</span>T<span class="sy1">></span>
|
|
<span class="sy4">:</span> __cond_value_type<span class="sy1"><</span><span class="kw1">typename</span> T<span class="sy4">::</span><span class="me2">element_type</span><span class="sy1">></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">类模板 <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"><</span>indirectly_readable I, indirectly_regular_unary_invocable<span class="sy1"><</span>I<span class="sy1">></span> Proj<span class="sy1">></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"><</span>indirect_result_t<span class="sy1"><</span>Proj<span class="sy3">&</span>, I<span class="sy1">>></span><span class="sy4">;</span>
|
|
indirect_result_t<span class="sy1"><</span>Proj<span class="sy3">&</span>, I<span class="sy1">></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">// 不定义</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>weakly_incrementable I, <span class="kw1">class</span> Proj<span class="sy1">></span>
|
|
<span class="kw1">struct</span> incrementable_traits<span class="sy1"><</span>projected<span class="sy1"><</span>I, Proj<span class="sy1">>></span> <span class="br0">{</span>
|
|
<span class="kw1">using</span> difference_type <span class="sy1">=</span> iter_difference_t<span class="sy1"><</span>I<span class="sy1">></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">类模板 <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"><</span><span class="kw1">class</span> I<span class="sy1">></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">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> value_type <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> difference_type <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> reference <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
requires is_object_v<span class="sy1"><</span>T<span class="sy1">></span>
|
|
<span class="kw1">struct</span> iterator_traits<span class="sy1"><</span>T<span class="sy2">*</span><span class="sy1">></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"><</span>T<span class="sy1">></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">&</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">迭代器标签</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">类模板 <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"><</span><span class="kw1">class</span> Iter<span class="sy1">></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">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> value_type <span class="sy1">=</span> iter_value_t<span class="sy1"><</span>Iter<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> difference_type <span class="sy1">=</span> iter_difference_t<span class="sy1"><</span>Iter<span class="sy1">></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"><</span>Iter<span class="sy1">></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"><</span>Iter<span class="sy1">></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"><</span><span class="kw1">class</span> U<span class="sy1">></span> <span class="kw4">constexpr</span> reverse_iterator<span class="br0">(</span><span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>U<span class="sy1">></span><span class="sy3">&</span> u<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> U<span class="sy1">></span> <span class="kw4">constexpr</span> reverse_iterator<span class="sy3">&</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>U<span class="sy1">></span><span class="sy3">&</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">></span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> requires <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">constexpr</span> reverse_iterator<span class="sy3">&</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">&</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">&</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">&</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">/* 未指明 */</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"><</span>Iter<span class="sy1">></span>
|
|
iter_move<span class="br0">(</span><span class="kw4">const</span> reverse_iterator<span class="sy3">&</span> i<span class="br0">)</span> <span class="kw1">noexcept</span><span class="br0">(</span><span class="coMULTI">/* 见描述 */</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>indirectly_swappable<span class="sy1"><</span>Iter<span class="sy1">></span> Iter2<span class="sy1">></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">&</span> x,
|
|
<span class="kw4">const</span> reverse_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span> <span class="kw1">noexcept</span><span class="br0">(</span><span class="coMULTI">/* 见描述 */</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">类模板 <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"><</span><span class="kw1">class</span> Container<span class="sy1">></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">&</span> x<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> back_insert_iterator<span class="sy3">&</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">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> back_insert_iterator<span class="sy3">&</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">&&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">constexpr</span> back_insert_iterator<span class="sy3">&</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">&</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">类模板 <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"><</span><span class="kw1">class</span> Container<span class="sy1">></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">&</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">&</span> x<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> front_insert_iterator<span class="sy3">&</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">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> front_insert_iterator<span class="sy3">&</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">&&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">constexpr</span> front_insert_iterator<span class="sy3">&</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">&</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">类模板 <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"><</span><span class="kw1">class</span> Container<span class="sy1">></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"><</span>Container<span class="sy1">></span> iter <span class="sy1">=</span> ranges<span class="sy4">::</span><span class="me2">iterator_t</span><span class="sy1"><</span>Container<span class="sy1">></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">&</span> x, ranges<span class="sy4">::</span><span class="me2">iterator_t</span><span class="sy1"><</span>Container<span class="sy1">></span> i<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> insert_iterator<span class="sy3">&</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">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> insert_iterator<span class="sy3">&</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">&&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">constexpr</span> insert_iterator<span class="sy3">&</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">&</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">&</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">类模板 <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"><</span><span class="kw1">class</span> Iter<span class="sy1">></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">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> value_type <span class="sy1">=</span> iter_value_t<span class="sy1"><</span>Iter<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> difference_type <span class="sy1">=</span> iter_difference_t<span class="sy1"><</span>Iter<span class="sy1">></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"><</span>Iter<span class="sy1">></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"><</span><span class="kw1">class</span> U<span class="sy1">></span> <span class="kw4">constexpr</span> move_iterator<span class="br0">(</span><span class="kw4">const</span> move_iterator<span class="sy1"><</span>U<span class="sy1">></span><span class="sy3">&</span> u<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> U<span class="sy1">></span> <span class="kw4">constexpr</span> move_iterator<span class="sy3">&</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> move_iterator<span class="sy1"><</span>U<span class="sy1">></span><span class="sy3">&</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">&</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> iterator_type base<span class="br0">(</span><span class="br0">)</span> <span class="sy3">&&</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">></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">&</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">&</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">&</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">&</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"><</span>sentinel_for<span class="sy1"><</span>Iter<span class="sy1">></span> S<span class="sy1">></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">&</span> x, <span class="kw4">const</span> move_sentinel<span class="sy1"><</span>S<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>sized_sentinel_for<span class="sy1"><</span>Iter<span class="sy1">></span> S<span class="sy1">></span>
|
|
<span class="kw1">friend</span> <span class="kw4">constexpr</span> iter_difference_t<span class="sy1"><</span>Iter<span class="sy1">></span>
|
|
operator<span class="sy2">-</span><span class="br0">(</span><span class="kw4">const</span> move_sentinel<span class="sy1"><</span>S<span class="sy1">></span><span class="sy3">&</span> x, <span class="kw4">const</span> move_iterator<span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>sized_sentinel_for<span class="sy1"><</span>Iter<span class="sy1">></span> S<span class="sy1">></span>
|
|
<span class="kw1">friend</span> <span class="kw4">constexpr</span> iter_difference_t<span class="sy1"><</span>Iter<span class="sy1">></span>
|
|
operator<span class="sy2">-</span><span class="br0">(</span><span class="kw4">const</span> move_iterator<span class="sy3">&</span> x, <span class="kw4">const</span> move_sentinel<span class="sy1"><</span>S<span class="sy1">></span><span class="sy3">&</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"><</span>Iter<span class="sy1">></span>
|
|
iter_move<span class="br0">(</span><span class="kw4">const</span> move_iterator<span class="sy3">&</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"><</span>indirectly_swappable<span class="sy1"><</span>Iter<span class="sy1">></span> Iter2<span class="sy1">></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">&</span> x, <span class="kw4">const</span> move_iterator<span class="sy1"><</span>Iter2<span class="sy1">></span><span class="sy3">&</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">// 仅用于阐释</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">类模板 <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"><</span>semiregular S<span class="sy1">></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"><</span><span class="kw1">class</span> S2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span><span class="kw4">const</span> S2<span class="sy3">&</span>, S<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> move_sentinel<span class="br0">(</span><span class="kw4">const</span> move_sentinel<span class="sy1"><</span>S2<span class="sy1">></span><span class="sy3">&</span> s<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> S2<span class="sy1">></span>
|
|
requires assignable_from<span class="sy1"><</span>S<span class="sy3">&</span>, <span class="kw4">const</span> S2<span class="sy3">&</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> move_sentinel<span class="sy3">&</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> move_sentinel<span class="sy1"><</span>S2<span class="sy1">></span><span class="sy3">&</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">// 仅用于阐释</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">类模板 <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"><</span>input_or_output_iterator I, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S<span class="sy1">></span>
|
|
requires <span class="br0">(</span><span class="sy3">!</span>same_as<span class="sy1"><</span>I, S<span class="sy1">></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"><</span><span class="kw1">class</span> I2, <span class="kw1">class</span> S2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span><span class="kw4">const</span> I2<span class="sy3">&</span>, I<span class="sy1">></span> <span class="sy3">&&</span> convertible_to<span class="sy1"><</span><span class="kw4">const</span> S2<span class="sy3">&</span>, S<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> common_iterator<span class="br0">(</span><span class="kw4">const</span> common_iterator<span class="sy1"><</span>I2, S2<span class="sy1">></span><span class="sy3">&</span> x<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I2, <span class="kw1">class</span> S2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span><span class="kw4">const</span> I2<span class="sy3">&</span>, I<span class="sy1">></span> <span class="sy3">&&</span> convertible_to<span class="sy1"><</span><span class="kw4">const</span> S2<span class="sy3">&</span>, S<span class="sy1">></span> <span class="sy3">&&</span>
|
|
assignable_from<span class="sy1"><</span>I<span class="sy3">&</span>, <span class="kw4">const</span> I2<span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span> assignable_from<span class="sy1"><</span>S<span class="sy3">&</span>, <span class="kw4">const</span> S2<span class="sy3">&</span><span class="sy1">></span>
|
|
common_iterator<span class="sy3">&</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> common_iterator<span class="sy1"><</span>I2, S2<span class="sy1">></span><span class="sy3">&</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"><</span><span class="kw4">const</span> I<span class="sy1">></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">></span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span>
|
|
requires <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
common_iterator<span class="sy3">&</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"><</span><span class="kw1">class</span> I2, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S2<span class="sy1">></span>
|
|
requires sentinel_for<span class="sy1"><</span>S, I2<span class="sy1">></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">&</span> x, <span class="kw4">const</span> common_iterator<span class="sy1"><</span>I2, S2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I2, sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S2<span class="sy1">></span>
|
|
requires sentinel_for<span class="sy1"><</span>S, I2<span class="sy1">></span> <span class="sy3">&&</span> equality_comparable_with<span class="sy1"><</span>I, I2<span class="sy1">></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">&</span> x, <span class="kw4">const</span> common_iterator<span class="sy1"><</span>I2, S2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>sized_sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> I2, sized_sentinel_for<span class="sy1"><</span>I<span class="sy1">></span> S2<span class="sy1">></span>
|
|
requires sized_sentinel_for<span class="sy1"><</span>S, I2<span class="sy1">></span>
|
|
<span class="kw1">friend</span> iter_difference_t<span class="sy1"><</span>I2<span class="sy1">></span> operator<span class="sy2">-</span><span class="br0">(</span>
|
|
<span class="kw4">const</span> common_iterator<span class="sy3">&</span> x, <span class="kw4">const</span> common_iterator<span class="sy1"><</span>I2, S2<span class="sy1">></span><span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">friend</span> iter_rvalue_reference_t<span class="sy1"><</span>I<span class="sy1">></span> iter_move<span class="br0">(</span><span class="kw4">const</span> common_iterator<span class="sy3">&</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"><</span><span class="kw4">const</span> I<span class="sy3">&</span><span class="sy1">></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"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>indirectly_swappable<span class="sy1"><</span>I<span class="sy1">></span> I2, <span class="kw1">class</span> S2<span class="sy1">></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">&</span> x, <span class="kw4">const</span> common_iterator<span class="sy1"><</span>I2, S2<span class="sy1">></span><span class="sy3">&</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"><</span><span class="kw4">const</span> I<span class="sy3">&</span><span class="sy1">></span><span class="br0">(</span><span class="br0">)</span>, declval<span class="sy1"><</span><span class="kw4">const</span> I2<span class="sy3">&</span><span class="sy1">></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"><</span>I, S<span class="sy1">></span> v_<span class="sy4">;</span> <span class="co1">// 仅用于阐释</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I, <span class="kw1">class</span> S<span class="sy1">></span>
|
|
<span class="kw1">struct</span> incrementable_traits<span class="sy1"><</span>common_iterator<span class="sy1"><</span>I, S<span class="sy1">>></span> <span class="br0">{</span>
|
|
<span class="kw1">using</span> difference_type <span class="sy1">=</span> iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I, <span class="kw1">class</span> S<span class="sy1">></span>
|
|
<span class="kw1">struct</span> iterator_traits<span class="sy1"><</span>common_iterator<span class="sy1"><</span>I, S<span class="sy1">>></span> <span class="br0">{</span>
|
|
<span class="kw1">using</span> iterator_concept <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> iterator_category <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> value_type <span class="sy1">=</span> iter_value_t<span class="sy1"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> difference_type <span class="sy1">=</span> iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> pointer <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> reference <span class="sy1">=</span> iter_reference_t<span class="sy1"><</span>I<span class="sy1">></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">类 <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">类模板 <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"><</span>input_or_output_iterator I<span class="sy1">></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"><</span>I<span class="sy1">></span> n<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I2<span class="sy1">></span>
|
|
requires convertible_to<span class="sy1"><</span><span class="kw4">const</span> I2<span class="sy3">&</span>, I<span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> counted_iterator<span class="br0">(</span><span class="kw4">const</span> counted_iterator<span class="sy1"><</span>I2<span class="sy1">></span><span class="sy3">&</span> x<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I2<span class="sy1">></span>
|
|
requires assignable_from<span class="sy1"><</span>I<span class="sy3">&</span>, <span class="kw4">const</span> I2<span class="sy3">&</span><span class="sy1">></span>
|
|
<span class="kw4">constexpr</span> counted_iterator<span class="sy3">&</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> counted_iterator<span class="sy1"><</span>I2<span class="sy1">></span><span class="sy3">&</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">&</span> requires copy_constructible<span class="sy1"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> I base<span class="br0">(</span><span class="br0">)</span> <span class="sy3">&&</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> iter_difference_t<span class="sy1"><</span>I<span class="sy1">></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"><</span><span class="kw4">const</span> I<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">constexpr</span> counted_iterator<span class="sy3">&</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"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> counted_iterator<span class="sy3">&</span> operator<span class="sy2">--</span><span class="br0">(</span><span class="br0">)</span>
|
|
requires bidirectional_iterator<span class="sy1"><</span>I<span class="sy1">></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"><</span>I<span class="sy1">></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"><</span>I<span class="sy1">></span> n<span class="br0">)</span> <span class="kw4">const</span>
|
|
requires random_access_iterator<span class="sy1"><</span>I<span class="sy1">></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"><</span>I<span class="sy1">></span> n, <span class="kw4">const</span> counted_iterator<span class="sy3">&</span> x<span class="br0">)</span>
|
|
requires random_access_iterator<span class="sy1"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> counted_iterator<span class="sy3">&</span> operator<span class="sy2">+</span><span class="sy1">=</span><span class="br0">(</span>iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> n<span class="br0">)</span>
|
|
requires random_access_iterator<span class="sy1"><</span>I<span class="sy1">></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"><</span>I<span class="sy1">></span> n<span class="br0">)</span> <span class="kw4">const</span>
|
|
requires random_access_iterator<span class="sy1"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>common_with<span class="sy1"><</span>I<span class="sy1">></span> I2<span class="sy1">></span>
|
|
<span class="kw1">friend</span> <span class="kw4">constexpr</span> iter_difference_t<span class="sy1"><</span>I2<span class="sy1">></span> operator<span class="sy2">-</span><span class="br0">(</span>
|
|
<span class="kw4">const</span> counted_iterator<span class="sy3">&</span> x, <span class="kw4">const</span> counted_iterator<span class="sy1"><</span>I2<span class="sy1">></span><span class="sy3">&</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"><</span>I<span class="sy1">></span> operator<span class="sy2">-</span><span class="br0">(</span>
|
|
<span class="kw4">const</span> counted_iterator<span class="sy3">&</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"><</span>I<span class="sy1">></span> operator<span class="sy2">-</span><span class="br0">(</span>
|
|
default_sentinel_t, <span class="kw4">const</span> counted_iterator<span class="sy3">&</span> y<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> counted_iterator<span class="sy3">&</span> operator<span class="sy2">-</span><span class="sy1">=</span><span class="br0">(</span>iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> n<span class="br0">)</span>
|
|
requires random_access_iterator<span class="sy1"><</span>I<span class="sy1">></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"><</span>I<span class="sy1">></span> n<span class="br0">)</span> <span class="kw4">const</span>
|
|
requires random_access_iterator<span class="sy1"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>common_with<span class="sy1"><</span>I<span class="sy1">></span> I2<span class="sy1">></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">&</span> x, <span class="kw4">const</span> counted_iterator<span class="sy1"><</span>I2<span class="sy1">></span><span class="sy3">&</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">&</span> x, default_sentinel_t<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>common_with<span class="sy1"><</span>I<span class="sy1">></span> I2<span class="sy1">></span>
|
|
<span class="kw1">friend</span> <span class="kw4">constexpr</span> strong_ordering operator<span class="sy1"><=></span><span class="br0">(</span>
|
|
<span class="kw4">const</span> counted_iterator<span class="sy3">&</span> x, <span class="kw4">const</span> counted_iterator<span class="sy1"><</span>I2<span class="sy1">></span><span class="sy3">&</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"><</span>I<span class="sy1">></span> iter_move<span class="br0">(</span><span class="kw4">const</span> counted_iterator<span class="sy3">&</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"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span>indirectly_swappable<span class="sy1"><</span>I<span class="sy1">></span> I2<span class="sy1">></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">&</span> x,
|
|
<span class="kw4">const</span> counted_iterator<span class="sy1"><</span>I2<span class="sy1">></span><span class="sy3">&</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">// 仅用于阐释</span>
|
|
iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span> length <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">// 仅用于阐释</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> I<span class="sy1">></span>
|
|
<span class="kw1">struct</span> incrementable_traits<span class="sy1"><</span>counted_iterator<span class="sy1"><</span>I<span class="sy1">>></span> <span class="br0">{</span>
|
|
<span class="kw1">using</span> difference_type <span class="sy1">=</span> iter_difference_t<span class="sy1"><</span>I<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span>input_iterator I<span class="sy1">></span>
|
|
<span class="kw1">struct</span> iterator_traits<span class="sy1"><</span>counted_iterator<span class="sy1"><</span>I<span class="sy1">>></span> <span class="sy4">:</span> iterator_traits<span class="sy1"><</span>I<span class="sy1">></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">类 <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"><</span>weakly_incrementable I<span class="sy1">></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">&</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">类模板 <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"><</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"><</span>CharT<span class="sy1">></span>,
|
|
<span class="kw1">class</span> Distance <span class="sy1">=</span> ptrdiff_t<span class="sy1">></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">&</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"><</span>CharT, Traits<span class="sy1">></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">&</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">&</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">&</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> istream_iterator<span class="sy3">&</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">&</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">></span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span>
|
|
istream_iterator<span class="sy3">&</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">&</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"><</span>CharT, Traits<span class="sy1">></span><span class="sy2">*</span> in_stream<span class="sy4">;</span> <span class="co1">// 仅用于阐释</span>
|
|
T value<span class="sy4">;</span> <span class="co1">// 仅用于阐释</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">类模板 <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"><</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"><</span>CharT<span class="sy1">>></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"><</span>CharT, Traits<span class="sy1">></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">&</span> s<span class="br0">)</span><span class="sy4">;</span>
|
|
ostream_iterator<span class="br0">(</span>ostream_type<span class="sy3">&</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">&</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">&</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> ostream_iterator<span class="sy3">&</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
|
|
ostream_iterator<span class="sy3">&</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> T<span class="sy3">&</span> value<span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
ostream_iterator<span class="sy3">&</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
ostream_iterator<span class="sy3">&</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
ostream_iterator<span class="sy3">&</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"><</span>CharT, Traits<span class="sy1">></span><span class="sy2">*</span> out_stream <span class="sy1">=</span> nullptr<span class="sy4">;</span> <span class="co1">// 仅用于阐释</span>
|
|
<span class="kw4">const</span> CharT<span class="sy2">*</span> delim <span class="sy1">=</span> nullptr<span class="sy4">;</span> <span class="co1">// 仅用于阐释</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">类模板 <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"><</span><span class="kw1">class</span> CharT, <span class="kw1">class</span> Traits <span class="sy1">=</span> char_traits<span class="sy1"><</span>CharT<span class="sy1">>></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">/* 未指明 */</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"><</span>CharT, Traits<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> istream_type <span class="sy1">=</span> basic_istream<span class="sy1"><</span>CharT, Traits<span class="sy1">></span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">class</span> proxy<span class="sy4">;</span> <span class="co1">// 仅用于阐释</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">&</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">&</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">&</span> p<span class="br0">)</span> <span class="kw1">noexcept</span><span class="sy4">;</span>
|
|
istreambuf_iterator<span class="sy3">&</span> operator<span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> istreambuf_iterator<span class="sy3">&</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">&</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">&</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">&</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">// 仅用于阐释</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> CharT, <span class="kw1">class</span> Traits<span class="sy1">></span>
|
|
<span class="kw1">class</span> istreambuf_iterator<span class="sy1"><</span>CharT, Traits<span class="sy1">></span><span class="sy4">::</span><span class="me2">proxy</span> <span class="br0">{</span> <span class="co1">// 仅用于阐释</span>
|
|
CharT keep_<span class="sy4">;</span>
|
|
basic_streambuf<span class="sy1"><</span>CharT, Traits<span class="sy1">></span><span class="sy2">*</span> sbuf_<span class="sy4">;</span>
|
|
proxy<span class="br0">(</span>CharT c, basic_streambuf<span class="sy1"><</span>CharT, Traits<span class="sy1">></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">类模板 <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"><</span><span class="kw1">class</span> CharT, <span class="kw1">class</span> Traits <span class="sy1">=</span> char_traits<span class="sy1"><</span>CharT<span class="sy1">>></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"><</span>CharT, Traits<span class="sy1">></span><span class="sy4">;</span>
|
|
<span class="kw1">using</span> ostream_type <span class="sy1">=</span> basic_ostream<span class="sy1"><</span>CharT, Traits<span class="sy1">></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">&</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">&</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">&</span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
ostreambuf_iterator<span class="sy3">&</span> operator<span class="sy2">++</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
ostreambuf_iterator<span class="sy3">&</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">// 仅用于阐释</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">类模板 <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"><</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">&</span><span class="sy1">></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>
|