<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Komplexität von vector::resize?]]></title><description><![CDATA[<p>Ich wundere mich gerade, ob bei einem vector <code>push_back(T())</code> die gleichen Laufzeitgarantien macht wie <code>resize(size()+1)</code> , also ob beides in amortisiert konstanter Zeit abläuft. Verschiedene Referenzen behaupten entweder O(new_size - old_size) oder O(new_size).</p>
<p>Also welche Laufzeitkomplexität hat vector::resize()?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322979/komplexität-von-vector-resize</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 12:38:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322979.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Jan 2014 15:19:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Komplexität von vector::resize? on Tue, 14 Jan 2014 15:19:25 GMT]]></title><description><![CDATA[<p>Ich wundere mich gerade, ob bei einem vector <code>push_back(T())</code> die gleichen Laufzeitgarantien macht wie <code>resize(size()+1)</code> , also ob beides in amortisiert konstanter Zeit abläuft. Verschiedene Referenzen behaupten entweder O(new_size - old_size) oder O(new_size).</p>
<p>Also welche Laufzeitkomplexität hat vector::resize()?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377272</guid><dc:creator><![CDATA[resiz0r]]></dc:creator><pubDate>Tue, 14 Jan 2014 15:19:25 GMT</pubDate></item><item><title><![CDATA[Reply to Komplexität von vector::resize? on Tue, 14 Jan 2014 15:44:56 GMT]]></title><description><![CDATA[<p>resize mit einer erhöhten Größe macht ein insert(end, new_size - size, T()). Die Komplexität von insert(position, n, x) ist O(n + end - position), hier also O(n). Und n ist hier 1. Also O(1), konstant.<br />
Im Standard werden insert und push_back bezüglich der Komplexität auch im gleichen Absatz genannt, die Angabe ist daher für beide gleich, bloß dass bei push_back eben automatisch schon n = 1 und position = end ist. Kurz: Ja, insert von einem Element am Ende ist das gleiche wie push_back.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377275</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 14 Jan 2014 15:44:56 GMT</pubDate></item><item><title><![CDATA[Reply to Komplexität von vector::resize? on Tue, 14 Jan 2014 16:16:48 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>resize mit einer erhöhten Größe macht ein insert(end, new_size - size, T()).</p>
</blockquote>
<p>Wo hast du das gefunden? Das würde nicht funktionieren, wenn T move-only ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377281</guid><dc:creator><![CDATA[resiz0r]]></dc:creator><pubDate>Tue, 14 Jan 2014 16:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to Komplexität von vector::resize? on Tue, 14 Jan 2014 16:46:51 GMT]]></title><description><![CDATA[<p>resiz0r schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>resize mit einer erhöhten Größe macht ein insert(end, new_size - size, T()).</p>
</blockquote>
<p>Wo hast du das gefunden? Das würde nicht funktionieren, wenn T move-only ist.</p>
</blockquote>
<p>Im C++98-Standard <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> . Wenn ich sage, dass (new_size -size) value-initialisierte Elemente am Ende eingefügt werden, ist es dann aktuell genug?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377288</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 14 Jan 2014 16:46:51 GMT</pubDate></item><item><title><![CDATA[Reply to Komplexität von vector::resize? on Tue, 14 Jan 2014 16:57:00 GMT]]></title><description><![CDATA[<p>resiz0r schrieb:</p>
<blockquote>
<p>Also welche Laufzeitkomplexität hat vector::resize()?</p>
</blockquote>
<p>Gute Frage. Die stellte ich mir auch schon. Und was für eine Garantie macht <code>reserve</code> ?</p>
<p>Der Standard sagt bei resize (mit einem Parameter) nur, dass falls size()&lt;parameter entsprechend viele neue Elemente &quot;value-initialized&quot; werden. Als Bedingung steht dann noch ein &quot;Requires: T shall be CopyInsertable&quot; into *this.</p>
<p>resize mit zwei Parametern sagt, dass der Effekt äquivalent zu</p>
<pre><code class="language-cpp">insert(end(),parameter1-size(),parameter2);
</code></pre>
<p>ist, falls <code>size()&lt;parameter1</code> . Und bei dem entsprechenden insert steht dann unter &quot;Complexity&quot;, dass der Aufwand linear in der Anzahl der Elemente sei plus die Entfernung des Iterators zum Ende, die hier in diesem Fall aber 0 ist. Wahrscheinlich muss man sich das Wort &quot;amortisiert&quot; noch dazu denken.</p>
<p>Daraus schließe ich, dass x.resize(x.size()+1) auch nur amortisiert konstante Zeit kostet.</p>
<p>Hätte ich das früher mal nachgeguckt, hätte ich mir in einer Situation etwas Komplizierteres mit von Hand geschriebener Verdoppelung der Kapazität per reserve sparen können. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Hoffen wir mal, dass sich die Implementierungen dran halten. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2377291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2377291</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 14 Jan 2014 16:57:00 GMT</pubDate></item></channel></rss>