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

206 lines
17 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>std::vector&lt;T,Allocator&gt;::reserve</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_container_vector_reserve 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%">std::vector&lt;T,Allocator&gt;::</span>reserve</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="cpp.html">cpp</a>&lrm; | <a href="cpp-container.html">container</a>&lrm; | <a href="cpp-container-vector.html">vector</a></span></div>
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
<table class="t-dcl-begin">
<tbody></tbody>
<tbody class="t-dcl-rev">
<tr class="t-dcl t-until-cxx20">
<td>
<div><span class="mw-geshi cpp source-cpp"><span class="kw4">void</span> reserve<span class="br0">(</span> size_type new_cap <span class="br0">)</span><span class="sy4">;</span></span></div>
</td>
<td class="t-dcl-nopad"></td>
<td><span class="t-mark-rev t-until-cxx20">(C++20 &#21069;)</span></td>
</tr>
<tr class="t-dcl t-since-cxx20">
<td>
<div><span class="mw-geshi cpp source-cpp"><span class="kw4">constexpr</span> <span class="kw4">void</span> reserve<span class="br0">(</span> size_type new_cap <span class="br0">)</span><span class="sy4">;</span></span></div>
</td>
<td class="t-dcl-nopad"></td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</tbody>
<tbody>
<tr class="t-dcl-sep">
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>&#22686;&#21152; <code>vector</code> &#30340;&#23481;&#37327;&#21040;&#22823;&#20110;&#25110;&#31561;&#20110; <code>new_cap</code> &#30340;&#20540;&#12290;&#33509; <code>new_cap</code> &#22823;&#20110;&#24403;&#21069;&#30340; <span class="t-lc"><a href="cpp-container-vector-capacity.html">capacity()</a></span> &#65292;&#21017;&#20998;&#37197;&#26032;&#23384;&#20648;&#65292;&#21542;&#21017;&#35813;&#26041;&#27861;&#19981;&#20570;&#20219;&#20309;&#20107;&#12290;</p>
<p><code>reserve()</code> &#19981;&#26356;&#25913; <code>vector</code> &#30340; <code>size</code> &#12290;</p>
<p>&#33509; <code>new_cap</code> &#22823;&#20110; <span class="t-lc"><a href="cpp-container-vector-capacity.html">capacity()</a></span> &#65292;&#21017;&#25152;&#26377;&#36845;&#20195;&#22120;&#65292;&#21253;&#21547;&#23614;&#21518;&#36845;&#20195;&#22120;&#21644;&#25152;&#26377;&#21040;&#20803;&#32032;&#30340;&#24341;&#29992;&#37117;&#34987;&#38750;&#27861;&#21270;&#12290;&#21542;&#21017;&#65292;&#27809;&#26377;&#36845;&#20195;&#22120;&#25110;&#24341;&#29992;&#34987;&#38750;&#27861;&#21270;&#12290;</p>
<h3><span class="mw-headline" id=".E5.8F.82.E6.95.B0">&#21442;&#25968;</span></h3>
<table class="t-par-begin">
<tr class="t-par">
<td>new_cap</td>
<td>-</td>
<td>vector &#30340;&#26032;&#23481;&#37327;</td>
</tr>
<tr class="t-par-hitem">
<td colspan="3">&#31867;&#22411;&#35201;&#27714;</td>
</tr>
<tr class="t-par-req">
<td colspan="3">-
<div class="spacer"></div>
<code>T</code> &#24517;&#39035;&#28385;&#36275;<a href="cpp-named_req-MoveInsertable.html"><span style="font-style:italic">&#21487;&#31227;&#21160;&#25554;&#20837;</span> <span style="font-family: Georgia, &#39;DejaVu Serif&#39;, serif; font-style:italic">(MoveInsertable)</span></a> &#30340;&#35201;&#27714;&#12290;</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E8.BF.94.E5.9B.9E.E5.80.BC">&#36820;&#22238;&#20540;</span></h3>
<p>&#65288;&#26080;&#65289;</p>
<h3><span class="mw-headline" id=".E5.BC.82.E5.B8.B8">&#24322;&#24120;</span></h3>
<ul>
<li>&#33509; <span class="t-c"><span class="mw-geshi cpp source-cpp">new_cap <span class="sy1">&gt;</span> max_size<span class="br0">(</span><span class="br0">)</span></span></span> &#21017;&#20026; <span class="t-lc"><a href="cpp-error-length_error.html">std::length_error</a></span> &#12290;</li>
<li>&#20219;&#20309; <code>Allocator::allocate()</code> &#25152;&#25243;&#30340;&#24322;&#24120;&#65288;&#20856;&#22411;&#20026; <span class="t-lc"><a href="cpp-memory-new-bad_alloc.html">std::bad_alloc</a></span> &#65289;</li>
</ul>
<p>&#33509;&#25243;&#20986;&#24322;&#24120;&#65292;&#21017;&#27492;&#20989;&#25968;&#26080;&#25928;&#26524;&#65288;<a href="cpp-language-exceptions.html">&#24378;&#24322;&#24120;&#20445;&#35777;</a>&#65289;&#12290;</p>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<p>&#33509; <code>T</code> &#30340;&#31227;&#21160;&#26500;&#36896;&#20989;&#25968;&#19981;&#26159; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">noexcept</span></span></span> &#19988; T &#38750;<a href="cpp-named_req-CopyInsertable.html"><span style="font-style:italic">&#21487;&#22797;&#21046;&#25554;&#20837;</span> <span style="font-family: Georgia, &#39;DejaVu Serif&#39;, serif; font-style:italic">(CopyInsertable)</span></a> &#21040; <code>*this</code> &#65292;&#21017; vector &#23558;&#20351;&#29992;&#31227;&#21160;&#26500;&#36896;&#20989;&#25968;&#12290;&#33509;&#23427;&#25243;&#20986;&#65292;&#21017;&#25682;&#24323;&#20445;&#35777;&#65292;&#19988;&#25928;&#26524;&#26410;&#25351;&#23450;&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E5.A4.8D.E6.9D.82.E5.BA.A6">&#22797;&#26434;&#24230;</span></h3>
<p>&#33267;&#22810;&#19982;&#23481;&#22120;&#30340; <span class="t-lc"><a href="cpp-container-vector-size.html">size()</a></span> &#25104;&#32447;&#24615;&#12290;</p>
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">&#27880;&#35299;</span></h3>
<p>&#27491;&#30830;&#20351;&#29992; <code>reserve()</code> &#33021;&#36991;&#20813;&#19981;&#24517;&#35201;&#30340;&#20998;&#37197;&#65292;&#20294;&#19981;&#36866;&#24403;&#22320;&#20351;&#29992; <code>reserve()</code> &#65288;&#20363;&#22914;&#22312;&#27599;&#27425; <span class="t-lc"><a href="cpp-container-vector-push_back.html">push_back()</a></span> &#35843;&#29992;&#21069;&#35843;&#29992;&#23427;&#65289;&#21487;&#33021;&#20250;&#23454;&#38469;&#22686;&#21152;&#37325;&#20998;&#37197;&#30340;&#25968;&#37327;&#65288;&#36890;&#36807;&#23548;&#33268;&#23481;&#37327;&#32447;&#24615;&#32780;&#38750;&#25351;&#25968;&#22686;&#38271;&#65289;&#24182;&#23548;&#33268;&#35745;&#31639;&#22797;&#26434;&#24230;&#22686;&#21152;&#65292;&#24615;&#33021;&#19979;&#38477;&#12290;&#20363;&#22914;&#65292;&#25353;&#24341;&#29992;&#25509;&#21463;&#20219;&#24847; <code>vector</code> &#24182;&#21518;&#38468;&#20803;&#32032;&#30340;&#20989;&#25968;&#36890;&#24120;<i>&#19981;</i>&#24212;&#22312; <code>vector</code> &#19978;&#35843;&#29992; <code>reserve()</code> &#65292;&#22240;&#20026;&#23427;&#19981;&#30693;&#36947;&#35813; <code>vector</code> &#30340;&#20351;&#29992;&#29305;&#24449;&#12290;</p>
<p>&#25554;&#20837;&#33539;&#22260;&#26102;&#65292; <span class="t-lc"><a href="cpp-container-vector-insert.html">insert()</a></span> &#30340;&#33539;&#22260;&#29256;&#26412;&#36890;&#24120;&#26356;&#21512;&#36866;&#65292;&#22240;&#20026;&#23427;&#20445;&#25345;&#27491;&#30830;&#30340;&#23481;&#37327;&#22686;&#38271;&#34892;&#20026;&#65292;&#32780;&#19981;&#21516;&#20110; <code>reserve()</code> &#21518;&#38543;&#19968;&#31995;&#21015; <span class="t-lc"><a href="cpp-container-vector-push_back.html">push_back()</a></span> &#12290;</p>
<p>&#19981;&#33021;&#29992; <code>reserve()</code> &#20943;&#23569;&#23481;&#22120;&#23481;&#37327;&#12290;&#20026;&#35813;&#30446;&#30340;&#25552;&#20379;&#30340;&#26159; <span class="t-lc"><a href="cpp-container-vector-shrink_to_fit.html">shrink_to_fit()</a></span> &#12290;</p>
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">&#31034;&#20363;</span></h3>
<div class="t-example">
<div class="t-example-live-link"></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co2">#include &lt;cstddef&gt;</span>
<span class="co2">#include &lt;new&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co1">// &#24102;&#35843;&#35797;&#36755;&#20986;&#30340;&#26368;&#23567; C++11 &#20998;&#37197;&#22120;</span>
<span class="kw1">template</span> <span class="sy1">&lt;</span><span class="kw1">class</span> Tp<span class="sy1">&gt;</span>
<span class="kw1">struct</span> NAlloc <span class="br0">{</span>
<span class="kw1">typedef</span> Tp value_type<span class="sy4">;</span>
NAlloc<span class="br0">(</span><span class="br0">)</span> <span class="sy1">=</span> <span class="kw1">default</span><span class="sy4">;</span>
<span class="kw1">template</span> <span class="sy1">&lt;</span><span class="kw1">class</span> T<span class="sy1">&gt;</span> NAlloc<span class="br0">(</span><span class="kw4">const</span> NAlloc<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
Tp<span class="sy2">*</span> allocate<span class="br0">(</span><a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> n<span class="br0">)</span>
<span class="br0">{</span>
n <span class="sy2">*</span><span class="sy1">=</span> sizeof<span class="br0">(</span>Tp<span class="br0">)</span><span class="sy4">;</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;allocating &quot;</span> <span class="sy1">&lt;&lt;</span> n <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; bytes<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="kw1">return</span> <span class="kw1">static_cast</span><span class="sy1">&lt;</span>Tp<span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span><span class="sy4">::</span><a href="cpp-memory-new-operator_new.html"><span class="kw687">operator new</span></a><span class="br0">(</span>n<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw4">void</span> deallocate<span class="br0">(</span>Tp<span class="sy2">*</span> p, <a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> n<span class="br0">)</span>
<span class="br0">{</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;deallocating &quot;</span> <span class="sy1">&lt;&lt;</span> n<span class="sy2">*</span>sizeof<span class="br0">(</span>Tp<span class="br0">)</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; bytes<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="sy4">::</span><a href="cpp-memory-new-operator_delete.html"><span class="kw689">operator delete</span></a><span class="br0">(</span>p<span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span> <span class="sy1">&lt;</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">&gt;</span>
<span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span><span class="kw4">const</span> NAlloc<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy3">&amp;</span>, <span class="kw4">const</span> NAlloc<span class="sy1">&lt;</span>U<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> <span class="kw2">true</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw1">template</span> <span class="sy1">&lt;</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">&gt;</span>
<span class="kw4">bool</span> operator<span class="sy3">!</span><span class="sy1">=</span><span class="br0">(</span><span class="kw4">const</span> NAlloc<span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy3">&amp;</span>, <span class="kw4">const</span> NAlloc<span class="sy1">&lt;</span>U<span class="sy1">&gt;</span><span class="sy3">&amp;</span><span class="br0">)</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="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="kw4">int</span> sz <span class="sy1">=</span> <span class="nu0">100</span><span class="sy4">;</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;using reserve: <span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="br0">{</span>
<a href="cpp-container-vector.html"><span class="kw1269">std::<span class="me2">vector</span></span></a><span class="sy1">&lt;</span><span class="kw4">int</span>, NAlloc<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;&gt;</span> v1<span class="sy4">;</span>
v1.<span class="me1">reserve</span><span class="br0">(</span>sz<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">for</span><span class="br0">(</span><span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> n <span class="sy1">&lt;</span> sz<span class="sy4">;</span> <span class="sy2">++</span>n<span class="br0">)</span>
v1.<span class="me1">push_back</span><span class="br0">(</span>n<span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;not using reserve: <span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="br0">{</span>
<a href="cpp-container-vector.html"><span class="kw1269">std::<span class="me2">vector</span></span></a><span class="sy1">&lt;</span><span class="kw4">int</span>, NAlloc<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;&gt;</span> v1<span class="sy4">;</span>
<span class="kw1">for</span><span class="br0">(</span><span class="kw4">int</span> n <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> n <span class="sy1">&lt;</span> sz<span class="sy4">;</span> <span class="sy2">++</span>n<span class="br0">)</span>
v1.<span class="me1">push_back</span><span class="br0">(</span>n<span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#21487;&#33021;&#30340;&#36755;&#20986;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="text source-text">
<pre class="de1">using reserve:
allocating 400 bytes
deallocating 400 bytes
not using reserve:
allocating 4 bytes
allocating 8 bytes
deallocating 4 bytes
allocating 16 bytes
deallocating 8 bytes
allocating 32 bytes
deallocating 16 bytes
allocating 64 bytes
deallocating 32 bytes
allocating 128 bytes
deallocating 64 bytes
allocating 256 bytes
deallocating 128 bytes
allocating 512 bytes
deallocating 256 bytes
deallocating 512 bytes</pre></div>
</div>
</div>
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">&#21442;&#38405;</span></h3>
<table class="t-dsc-begin">
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-container-vector-capacity.html"><span class="t-lines"><span>capacity</span></span></a></div>
</div>
</td>
<td>&#36820;&#22238;&#24403;&#21069;&#23384;&#20648;&#31354;&#38388;&#33021;&#22815;&#23481;&#32435;&#30340;&#20803;&#32032;&#25968;<br />
<span class="t-mark">(&#20844;&#24320;&#25104;&#21592;&#20989;&#25968;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-container-vector-max_size.html"><span class="t-lines"><span>max_size</span></span></a></div>
</div>
</td>
<td>&#36820;&#22238;&#21487;&#23481;&#32435;&#30340;&#26368;&#22823;&#20803;&#32032;&#25968;<br />
<span class="t-mark">(&#20844;&#24320;&#25104;&#21592;&#20989;&#25968;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-container-vector-resize.html"><span class="t-lines"><span>resize</span></span></a></div>
</div>
</td>
<td>&#25913;&#21464;&#23481;&#22120;&#20013;&#21487;&#23384;&#20648;&#20803;&#32032;&#30340;&#20010;&#25968;<br />
<span class="t-mark">(&#20844;&#24320;&#25104;&#21592;&#20989;&#25968;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-container-vector-shrink_to_fit.html"><span class="t-lines"><span>shrink_to_fit</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>&#36890;&#36807;&#37322;&#25918;&#26410;&#20351;&#29992;&#30340;&#20869;&#23384;&#20943;&#23569;&#20869;&#23384;&#30340;&#20351;&#29992;<br />
<span class="t-mark">(&#20844;&#24320;&#25104;&#21592;&#20989;&#25968;)</span></td>
</tr>
</table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>