379 lines
41 KiB
HTML
379 lines
41 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>C++ 具名要求:序列容器 (SequenceContainer)</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_named_req_SequenceContainer 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%">C++ 具名要求:</span><span style="font-style:italic">序列容器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(SequenceContainer)</span></h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-named_req.html">named req</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<p><strong class="selflink"><span style="font-style:italic">序列容器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(SequenceContainer)</span></strong> 是在线性排列中存储相同类型对象的<a href="cpp-named_req-Container.html"><span style="font-style:italic">容器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(Container)</span></a> 。</p>
|
|
<h3><span class="mw-headline" id=".E8.A6.81.E6.B1.82">要求</span></h3>
|
|
<p>以下情况下,类型 <code>X</code> 满足<strong class="selflink"><span style="font-style:italic">序列容器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(SequenceContainer)</span></strong></p>
|
|
<ul>
|
|
<li>类型 <code>X</code> 满足<a href="cpp-named_req-Container.html"><span style="font-style:italic">容器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(Container)</span></a> ,且</li>
|
|
</ul>
|
|
<p>给定</p>
|
|
<ul>
|
|
<li><code>T</code>,为 <code>X</code> 的元素类型</li>
|
|
<li><code>A</code>,为 <code>X</code> 的分配器类型:若存在则为 <span class="t-c"><span class="mw-geshi cpp source-cpp">X<span class="sy4">::</span><span class="me2">allocator_type</span></span></span>,否则为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-memory-allocator.html"><span class="kw700">std::<span class="me2">allocator</span></span></a><span class="sy1"><</span>T<span class="sy1">></span></span></span></li>
|
|
<li><code>a</code>,为 <code>X</code> 类型的<a href="cpp-language-value_category.html">左值</a>表达式</li>
|
|
<li><code>p</code>,<code>a</code> 中的有效常量迭代器</li>
|
|
<li><code>q</code>,<code>a</code> 中的有效可解引用常量迭代器</li>
|
|
<li><code>q1</code> 与 <code>q2</code>,为 <code>a</code> 中的两个有效常量迭代器,并使得 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">[</span>q1, q2<span class="br0">)</span></span></span> 是有效范围</li>
|
|
<li><code>i</code> 与 <code>j</code>,为<a href="cpp-named_req-InputIterator.html"><span style="font-style:italic">老式输入迭代器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(LegacyInputIterator)</span></a> ,使得 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">[</span>i, j<span class="br0">)</span></span></span> 是有效范围,且各迭代器指代能隐式转换成 <code>value_type</code> 的对象</li>
|
|
<li><code>il</code>,为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-utility-initializer_list.html"><span class="kw960">std::<span class="me2">initializer_list</span></span></a><span class="sy1"><</span>value_type<span class="sy1">></span></span></span> 类型的对象</li>
|
|
<li><code>n</code>,为 <span class="t-c"><span class="mw-geshi cpp source-cpp">X<span class="sy4">::</span><span class="me2">size_type</span></span></span> 类型的值</li>
|
|
<li><code>t</code>,为 <span class="t-c"><span class="mw-geshi cpp source-cpp">X<span class="sy4">::</span><span class="me2">value_type</span></span></span> 类型的左值或 const 右值</li>
|
|
<li><code>rv</code>,为 <span class="t-c"><span class="mw-geshi cpp source-cpp">X<span class="sy4">::</span><span class="me2">value_type</span></span></span> 类型的非 const 右值</li>
|
|
<li><code>Args</code>:模板形参包</li>
|
|
<li><code>args</code>:拥有模式 <span class="t-c"><span class="mw-geshi cpp source-cpp">Arg<span class="sy3">&&</span></span></span> 的函数形参包</li>
|
|
</ul>
|
|
<p>下列表达式必须合法,且对除 <span class="t-lc"><a href="cpp-container-array.html">std::array</a></span> 之外的所有顺序容器均具有所指定的效果:</p>
|
|
<table class="wikitable">
|
|
<tr>
|
|
<th>表达式</th>
|
|
<th>返回类型</th>
|
|
<th>效果</th>
|
|
<th>前条件</th>
|
|
<th>后条件</th>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">X<span class="br0">(</span>n, t<span class="br0">)</span></span></span>
|
|
<p><span class="t-c"><span class="mw-geshi cpp source-cpp">X a<span class="br0">(</span>n, t<span class="br0">)</span></span></span></p>
|
|
</td>
|
|
<td></td>
|
|
<td>构造保有 <code><b>n</b></code> 个 <code><b>t</b></code> 的副本的容器</td>
|
|
<td><code>T</code> <a href="cpp-named_req-CopyInsertable.html"><span style="font-style:italic">可复制插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyInsertable)</span></a> 到 <code>X</code></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-iterator-distance.html"><span class="kw673">std::<span class="me2">distance</span></span></a><span class="br0">(</span>begin<span class="br0">(</span><span class="br0">)</span>,end<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="sy1">==</span> n</span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">X<span class="br0">(</span>i, j<span class="br0">)</span></span></span>
|
|
<p><span class="t-c"><span class="mw-geshi cpp source-cpp">X a<span class="br0">(</span>i, j<span class="br0">)</span></span></span></p>
|
|
</td>
|
|
<td></td>
|
|
<td>构造与范围 <code>[i,j)</code> 逐元素相等的顺序容器</td>
|
|
<td><code>T</code> 从 <code>*i</code> <a href="cpp-named_req-EmplaceConstructible.html"><span style="font-style:italic">可就位构造</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(EmplaceConstructible)</span></a> 到 <code>X</code> 中
|
|
<p><span class="t-mark">(仅对 std::vector)</span>若各迭代器不是<a href="cpp-named_req-ForwardIterator.html"><span style="font-style:italic">老式向前迭代器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(LegacyForwardIterator)</span></a> ,则 <code>T</code> 必须<a href="cpp-named_req-CopyInsertable.html"><span style="font-style:italic">可复制插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyInsertable)</span></a></p>
|
|
</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-iterator-distance.html"><span class="kw673">std::<span class="me2">distance</span></span></a><span class="br0">(</span>begin<span class="br0">(</span><span class="br0">)</span>,end<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="sy1">==</span> <a href="cpp-iterator-distance.html"><span class="kw673">std::<span class="me2">distance</span></span></a><span class="br0">(</span>i,j<span class="br0">)</span></span></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">X<span class="br0">(</span>il<span class="br0">)</span></span></span></td>
|
|
<td></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">X<span class="br0">(</span>il.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span>, il.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span></span></span></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a <span class="sy1">=</span> il</span></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">X<span class="sy3">&</span></span></span></td>
|
|
<td>将 <code><b>il</b></code> 所表示的范围赋值到 <code><b>a</b></code> 中<sup id="cite_ref-1" class="reference"><a href="cpp-named_req-SequenceContainer.html#cite_note-1">[1]</a></sup></td>
|
|
<td><code>T</code> <a href="cpp-named_req-CopyInsertable.html"><span style="font-style:italic">可复制插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyInsertable)</span></a> 且<a href="cpp-named_req-CopyAssignable.html"><span style="font-style:italic">可复制赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyAssignable)</span></a></td>
|
|
<td><code><b>a</b></code> 的既存元素被销毁或被赋值</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">emplace</span><span class="br0">(</span>p,args<span class="br0">)</span></span></span></td>
|
|
<td><code>iterator</code></td>
|
|
<td>在 <code><b>p</b></code> 前插入以 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>Args<span class="sy1">></span><span class="br0">(</span>args<span class="br0">)</span></span></span> 构造的 <code>T</code> 类型的对象</td>
|
|
<td><code>T</code> <a href="cpp-named_req-CopyInsertable.html"><span style="font-style:italic">可复制插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyInsertable)</span></a>
|
|
<p><span class="t-mark">(对 std::vector 与 std::deque)</span> <code>T</code> <a href="cpp-named_req-MoveAssignable.html"><span style="font-style:italic">可移动赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveAssignable)</span></a> 且<a href="cpp-named_req-MoveInsertable.html"><span style="font-style:italic">可移动插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveInsertable)</span></a></p>
|
|
</td>
|
|
<td>返回指向由 <code>args</code> 构造到 <code>a</code> 中的元素的迭代器</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">insert</span><span class="br0">(</span>p,t<span class="br0">)</span></span></span></td>
|
|
<td><code>iterator</code></td>
|
|
<td>在 <code><b>p</b></code> 前插入 <code><b>t</b></code> 的副本</td>
|
|
<td><code>T</code> <a href="cpp-named_req-CopyInsertable.html"><span style="font-style:italic">可复制插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyInsertable)</span></a>
|
|
<p><span class="t-mark">(对 std::vector 与 std::deque)</span> <code>T</code> <a href="cpp-named_req-CopyAssignable.html"><span style="font-style:italic">可复制赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyAssignable)</span></a> 或<a href="cpp-named_req-MoveAssignable.html"><span style="font-style:italic">可移动赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveAssignable)</span></a></p>
|
|
</td>
|
|
<td>返回指向插入到 <code>a</code> 中的 <code>t</code> 的副本的迭代器</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">insert</span><span class="br0">(</span>p,rv<span class="br0">)</span></span></span></td>
|
|
<td><code>iterator</code></td>
|
|
<td>在 <code><b>p</b></code> 前插入 <code><b>rv</b></code> 的副本,可能用移动语义</td>
|
|
<td><code>T</code> <a href="cpp-named_req-MoveInsertable.html"><span style="font-style:italic">可移动插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveInsertable)</span></a>
|
|
<p><span class="t-mark">(对 std::vector 与 std::deque)</span> <code>T</code> <a href="cpp-named_req-MoveAssignable.html"><span style="font-style:italic">可移动赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveAssignable)</span></a></p>
|
|
</td>
|
|
<td>返回指向插入到 <code>a</code> 中的 <code>rv</code> 的副本的迭代器</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">insert</span><span class="br0">(</span>p,n,t<span class="br0">)</span></span></span></td>
|
|
<td><code>iterator</code></td>
|
|
<td>插入 <code><b>n</b></code> 个 <code><b>t</b></code> 的副本到 <code><b>p</b></code> 之前</td>
|
|
<td><code>T</code> <a href="cpp-named_req-CopyInsertable.html"><span style="font-style:italic">可复制插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyInsertable)</span></a> 且<a href="cpp-named_req-CopyAssignable.html"><span style="font-style:italic">可复制赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyAssignable)</span></a></td>
|
|
<td>返回指向插入到 <code>a</code> 中的首元素的副本的迭代器,或当 <span class="t-c"><span class="mw-geshi cpp source-cpp">n<span class="sy1">==</span><span class="nu0">0</span></span></span> 时为 <code>p</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">insert</span><span class="br0">(</span>p,i,j<span class="br0">)</span></span></span></td>
|
|
<td><code>iterator</code></td>
|
|
<td>插入 <code>[i, j)</code> 中元素的副本到 <code><b>p</b></code> 之前</td>
|
|
<td><code>T</code> <a href="cpp-named_req-EmplaceConstructible.html"><span style="font-style:italic">可就位构造</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(EmplaceConstructible)</span></a> 且 <code><b>i</b></code> 与 <code><b>j</b></code> 不在 <code><b>a</b></code> 中
|
|
<p><span class="t-mark">(仅对 std::vector)</span>若迭代器不是<a href="cpp-named_req-ForwardIterator.html"><span style="font-style:italic">老式向前迭代器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(LegacyForwardIterator)</span></a> ,则 <code>T</code> 必须<a href="cpp-named_req-MoveInsertable.html"><span style="font-style:italic">可移动插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveInsertable)</span></a> 且<a href="cpp-named_req-MoveAssignable.html"><span style="font-style:italic">可移动赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveAssignable)</span></a></p>
|
|
</td>
|
|
<td><code>[i,j)</code> 中的每个迭代器被解引用一次。返回指向插入到 <code>a</code> 的首元素的副本的迭代器,或当 <span class="t-c"><span class="mw-geshi cpp source-cpp">i<span class="sy1">==</span>j</span></span> 时为 <code>p</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">insert</span><span class="br0">(</span>p, il<span class="br0">)</span></span></span></td>
|
|
<td><code>iterator</code></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">insert</span><span class="br0">(</span>p,il.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span>,il.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span></span></span></td>
|
|
<td></td>
|
|
<td>返回指向插入到 <code>a</code> 中的首元素的副本的迭代器,或若 <code>il</code> 为空则为 <code>p</code>。</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">erase</span><span class="br0">(</span>q<span class="br0">)</span></span></span></td>
|
|
<td><code>iterator</code></td>
|
|
<td>擦除 <code>q</code> 所指向的元素</td>
|
|
<td><span class="t-mark">(std::deque, std::vector)</span> <code>T</code> <a href="cpp-named_req-MoveAssignable.html"><span style="font-style:italic">可移动赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveAssignable)</span></a></td>
|
|
<td>返回指向擦除前紧跟 <code>q</code> 之后的元素的迭代器,或若此种元素不存在则返回 <span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span></span></span>。</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">erase</span><span class="br0">(</span>q1,q2<span class="br0">)</span></span></span></td>
|
|
<td><code>iterator</code></td>
|
|
<td>擦除 <code>[q1,q2)</code> 中的元素</td>
|
|
<td><span class="t-mark">(std::deque, std::vector)</span> <code>T</code> <a href="cpp-named_req-MoveAssignable.html"><span style="font-style:italic">可移动赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveAssignable)</span></a></td>
|
|
<td>返回指向在任何擦除前 <code>q2</code> 曾指向的元素的迭代器,或若不存在此种元素则返回 <span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span></span></span>。</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">clear</span><span class="br0">(</span><span class="br0">)</span></span></span></td>
|
|
<td><code>void</code></td>
|
|
<td>销毁 <code><b>a</b></code> 中所有元素</td>
|
|
<td></td>
|
|
<td>
|
|
<p>所有引用、指针及迭代器均失效,包含尾迭代器。<span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">empty</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">==</span> <span class="kw2">true</span></span></span>。</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">assign</span><span class="br0">(</span>i,j<span class="br0">)</span></span></span></td>
|
|
<td><code>void</code></td>
|
|
<td>以 <code>[i, j)</code> 的副本替换 a 中的元素</td>
|
|
<td><code>T</code> <a href="cpp-named_req-EmplaceConstructible.html"><span style="font-style:italic">可就位构造</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(EmplaceConstructible)</span></a> ,且 <code><b>i</b></code>、<code><b>j</b></code> 不在 <code><b>a</b></code> 中
|
|
<p><span class="t-mark">(std::vector)</span>,若非<a href="cpp-named_req-ForwardIterator.html"><span style="font-style:italic">老式向前迭代器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(LegacyForwardIterator)</span></a> ,则 <code>T</code> <a href="cpp-named_req-MoveInsertable.html"><span style="font-style:italic">可移动插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveInsertable)</span></a></p>
|
|
</td>
|
|
<td><code>[i,j)</code> 中的每个迭代器被解引用一次</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">assign</span><span class="br0">(</span>il<span class="br0">)</span></span></span></td>
|
|
<td><code>void</code></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">assign</span><span class="br0">(</span>il.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span>,il.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span></span></span></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">assign</span><span class="br0">(</span>n,t<span class="br0">)</span></span></span></td>
|
|
<td><code>void</code></td>
|
|
<td>用 <code><b>t</b></code> 的 <code><b>n</b></code> 个副本替换 <code><b>a</b></code> 中的元素</td>
|
|
<td><code>T</code> <a href="cpp-named_req-CopyInsertable.html"><span style="font-style:italic">可复制插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyInsertable)</span></a> 并<a href="cpp-named_req-CopyAssignable.html"><span style="font-style:italic">可复制赋值</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyAssignable)</span></a></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="5">注</th>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<ol class="references">
|
|
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="cpp-named_req-SequenceContainer.html#cite_ref-1">↑</a></span> <span class="reference-text"><span class="t-lc"><a href="cpp-container-array.html">std::array</a></span> 支持从花括号初始化器列表复制,但不支持从 <span class="t-lc"><a href="cpp-utility-initializer_list.html">std::initializer_list</a></span> 赋值</span></li>
|
|
</ol>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<p>下列表达式必须合法,且对于所指名的顺序容器拥有所指定的效果:</p>
|
|
<table class="wikitable">
|
|
<tr>
|
|
<th>表达式</th>
|
|
<th>返回类型</th>
|
|
<th>效果</th>
|
|
<th>前条件</th>
|
|
<th>容器</th>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">front</span><span class="br0">(</span><span class="br0">)</span></span></span></td>
|
|
<td><code>reference</code>
|
|
<p>对于 const a 为 <code>const_reference</code></p>
|
|
</td>
|
|
<td>等价于 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span>a.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span></span></span></td>
|
|
<td></td>
|
|
<td>(全部)</td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">back</span><span class="br0">(</span><span class="br0">)</span></span></span></td>
|
|
<td><code>reference</code>
|
|
<p>对于 const a 为 <code>const_reference</code></p>
|
|
</td>
|
|
<td>等价于 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">{</span> <span class="kw4">auto</span> tmp <span class="sy1">=</span> a.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="sy2">--</span>tmp<span class="sy4">;</span> <span class="kw1">return</span> <span class="sy2">*</span>tmp<span class="sy4">;</span> <span class="br0">}</span></span></span></td>
|
|
<td></td>
|
|
<td><span class="t-lc"><a href="cpp-string-basic_string.html">std::basic_string</a></span> <span class="t-lc"><a href="cpp-container-array.html">std::array</a></span> <span class="t-lc"><a href="cpp-container-deque.html">std::deque</a></span> <span class="t-lc"><a href="cpp-container-list.html">std::list</a></span> <span class="t-lc"><a href="cpp-container-vector.html">std::vector</a></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">emplace_front</span><span class="br0">(</span>args<span class="br0">)</span></span></span></td>
|
|
<td><code>void</code></td>
|
|
<td>前附一个以 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>Args<span class="sy1">></span><span class="br0">(</span>args<span class="br0">)</span>...</span></span> 构造的 <code>T</code></td>
|
|
<td><code>T</code> 从 <code>args</code> <a href="cpp-named_req-EmplaceConstructible.html"><span style="font-style:italic">可就位构造</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(EmplaceConstructible)</span></a> 到 <code>X</code> 中</td>
|
|
<td><span class="t-lc"><a href="cpp-container-deque.html">std::deque</a></span> <span class="t-lc"><a href="cpp-container-forward_list.html">std::forward_list</a></span> <span class="t-lc"><a href="cpp-container-list.html">std::list</a></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">emplace_back</span><span class="br0">(</span>args<span class="br0">)</span></span></span></td>
|
|
<td><code>void</code></td>
|
|
<td>后附一个以 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>Args<span class="sy1">></span><span class="br0">(</span>args<span class="br0">)</span>...</span></span> 构造的 <code>T</code></td>
|
|
<td><code>T</code> 从 <code>args</code> <a href="cpp-named_req-EmplaceConstructible.html"><span style="font-style:italic">可就位构造</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(EmplaceConstructible)</span></a> 到 <code>X</code> 中
|
|
<p><span class="t-mark">(仅 std::vector)</span> <code>T</code> <a href="cpp-named_req-MoveInsertable.html"><span style="font-style:italic">可移动插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveInsertable)</span></a> 到 <code>X</code> 中</p>
|
|
</td>
|
|
<td><span class="t-lc"><a href="cpp-container-deque.html">std::deque</a></span> <span class="t-lc"><a href="cpp-container-list.html">std::list</a></span> <span class="t-lc"><a href="cpp-container-vector.html">std::vector</a></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">push_front</span><span class="br0">(</span>t<span class="br0">)</span></span></span></td>
|
|
<td><code>void</code></td>
|
|
<td>前附 <code>t</code> 的一个副本</td>
|
|
<td><code>T</code> <a href="cpp-named_req-CopyInsertable.html"><span style="font-style:italic">可复制插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyInsertable)</span></a> 到 <code>X</code> 中</td>
|
|
<td><span class="t-lc"><a href="cpp-container-deque.html">std::deque</a></span> <span class="t-lc"><a href="cpp-container-forward_list.html">std::forward_list</a></span> <span class="t-lc"><a href="cpp-container-list.html">std::list</a></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">push_front</span><span class="br0">(</span>rv<span class="br0">)</span></span></span></td>
|
|
<td><code>void</code></td>
|
|
<td>前附 <code>rv</code> 的一个副本,可能用移动语义</td>
|
|
<td><code>T</code> <a href="cpp-named_req-MoveInsertable.html"><span style="font-style:italic">可移动插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveInsertable)</span></a> 到 <code>X</code> 中</td>
|
|
<td><span class="t-lc"><a href="cpp-container-deque.html">std::deque</a></span> <span class="t-lc"><a href="cpp-container-forward_list.html">std::forward_list</a></span> <span class="t-lc"><a href="cpp-container-list.html">std::list</a></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">push_back</span><span class="br0">(</span>t<span class="br0">)</span></span></span></td>
|
|
<td><code>void</code></td>
|
|
<td>后附 <code>t</code> 的一个副本</td>
|
|
<td><code>T</code> <a href="cpp-named_req-CopyInsertable.html"><span style="font-style:italic">可复制插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(CopyInsertable)</span></a> 到 <code>X</code> 中</td>
|
|
<td><span class="t-lc"><a href="cpp-string-basic_string.html">std::basic_string</a></span> <span class="t-lc"><a href="cpp-container-deque.html">std::deque</a></span> <span class="t-lc"><a href="cpp-container-list.html">std::list</a></span> <span class="t-lc"><a href="cpp-container-vector.html">std::vector</a></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">push_back</span><span class="br0">(</span>rv<span class="br0">)</span></span></span></td>
|
|
<td><code>void</code></td>
|
|
<td>后附 <code>rv</code> 的一个副本,可能用移动语义</td>
|
|
<td><code>T</code> <a href="cpp-named_req-MoveInsertable.html"><span style="font-style:italic">可移动插入</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(MoveInsertable)</span></a> 到 <code>X</code> 中</td>
|
|
<td><span class="t-lc"><a href="cpp-string-basic_string.html">std::basic_string</a></span> <span class="t-lc"><a href="cpp-container-deque.html">std::deque</a></span> <span class="t-lc"><a href="cpp-container-list.html">std::list</a></span> <span class="t-lc"><a href="cpp-container-vector.html">std::vector</a></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">pop_front</span><span class="br0">(</span><span class="br0">)</span></span></span></td>
|
|
<td><code>void</code></td>
|
|
<td>销毁首元素</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">empty</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">==</span> <span class="kw2">false</span></span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-container-deque.html">std::deque</a></span> <span class="t-lc"><a href="cpp-container-forward_list.html">std::forward_list</a></span> <span class="t-lc"><a href="cpp-container-list.html">std::list</a></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">pop_back</span><span class="br0">(</span><span class="br0">)</span></span></span></td>
|
|
<td><code>void</code></td>
|
|
<td>销毁最末元素</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">empty</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">==</span> <span class="kw2">false</span></span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-string-basic_string.html">std::basic_string</a></span> <span class="t-lc"><a href="cpp-container-deque.html">std::deque</a></span> <span class="t-lc"><a href="cpp-container-list.html">std::list</a></span> <span class="t-lc"><a href="cpp-container-vector.html">std::vector</a></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a<span class="br0">[</span>n<span class="br0">]</span></span></span></td>
|
|
<td><code>reference</code>
|
|
<p>对于 const a 为 <code>const_reference</code></p>
|
|
</td>
|
|
<td>等价于 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span><span class="br0">(</span>n <span class="sy2">+</span> a.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span></span></span></td>
|
|
<td></td>
|
|
<td><span class="t-lc"><a href="cpp-string-basic_string.html">std::basic_string</a></span> <span class="t-lc"><a href="cpp-container-array.html">std::array</a></span> <span class="t-lc"><a href="cpp-container-deque.html">std::deque</a></span> <span class="t-lc"><a href="cpp-container-vector.html">std::vector</a></span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">a.<span class="me1">at</span><span class="br0">(</span>n<span class="br0">)</span></span></span></td>
|
|
<td><code>reference</code>
|
|
<p>对于 const a 为 <code>const_reference</code></p>
|
|
</td>
|
|
<td>等价于 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span><span class="br0">(</span>n <span class="sy2">+</span> a.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span></span></span>,但若 <span class="t-c"><span class="mw-geshi cpp source-cpp">n<span class="sy1">>=</span>size<span class="br0">(</span><span class="br0">)</span></span></span> 则抛出 <span class="t-lc">out_of_range</span></td>
|
|
<td></td>
|
|
<td><span class="t-lc"><a href="cpp-string-basic_string.html">std::basic_string</a></span> <span class="t-lc"><a href="cpp-container-array.html">std::array</a></span> <span class="t-lc"><a href="cpp-container-deque.html">std::deque</a></span> <span class="t-lc"><a href="cpp-container-vector.html">std::vector</a></span></td>
|
|
</tr>
|
|
</table>
|
|
<p>另外,对于每个顺序容器,接收两个输入迭代器的构造函数模板和成员函数 <code>insert()</code>、<code>append()</code>、<code>assign()</code>、<code>replace()</code> 的模板重载,若相应的模板实参不满足<a href="cpp-named_req-InputIterator.html"><span style="font-style:italic">老式输入迭代器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(LegacyInputIterator)</span></a> ,则它们不参与重载决议。</p>
|
|
<h3><span class="mw-headline" id=".E6.A0.87.E5.87.86.E5.BA.93.E4.B8.AD.E7.9A.84.E9.A1.BA.E5.BA.8F.E5.AE.B9.E5.99.A8">标准库中的顺序容器</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-basic_string.html"><span class="t-lines"><span>basic_string</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-container-array.html"><span class="t-lines"><span>array</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-container-vector.html"><span class="t-lines"><span>vector</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-container-deque.html"><span class="t-lines"><span>deque</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-container-forward_list.html"><span class="t-lines"><span>forward_list</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-container-list.html"><span class="t-lines"><span>list</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>双链表<br />
|
|
<span class="t-mark">(类模板)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h4><span class="mw-headline" id=".E6.9D.83.E8.A1.A1.2F.E4.BD.BF.E7.94.A8.E5.A4.87.E6.B3.A8">权衡/使用备注</span></h4>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>std::array</td>
|
|
<td>快速访问但元素数量固定</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>std::vector</td>
|
|
<td>快速访问但大多情况在插入/删除低效</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>std::list<br />
|
|
std::forward_list</td>
|
|
<td>在序列中部高效地插入/删除</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>std::deque</td>
|
|
<td>在序列首尾高效地插入/删除</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|