<?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[Schnellste Möglichkeit, einen Vector zu leeren]]></title><description><![CDATA[<p>Hallo, ich habe in meinem Programm einen sehr großen Vector. Diesen möchte ich jetzt leeren. Welche Methode ist dabei die schnellste oder üblichste?</p>
<pre><code class="language-cpp">vector&lt;TYP&gt; grosser_vector;
//...

//Methode 1
vector&lt;TYP&gt; leerer_vector;
grosser_vector = leerer_vector;

//Methode 2
grosser_vector.resize(0);

//Methode 3
grosser_vector.clear();

//Methode 4
grosser_vector.erase( grosser_vector.begin() , grosser_vector.end() );

//Methode5
grosser_vector.assign(0,0); //ich glaube nicht, dass diese Methode wirklich &quot;sauber&quot; ist...

//Methode 6
while (!grosser_vector.empty())
    grosser_vector.pop_back();  //ich denke, das ist die langsamste Variante

//Methode 7
//ähnlich wie Methode 1:
vector&lt;TYP&gt; leerer_vector;
grosser_vector.swap( leerer_vector );
</code></pre>
<p>Welche dieser Methoden ist jetzt die schnellste bzw. üblichste?<br />
Anmerkung: Methode 7 habe ich mit in die Liste genommen, da keine der anderen Methoden ja wirklich Speicher freigibt und swap ja normalerweise sehr performant ist. Gibt es auch irgendeinen Weg (nicht destruktor), den Speicher des vectors freizugeben?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243033/schnellste-möglichkeit-einen-vector-zu-leeren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 15:10:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243033.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Jun 2009 12:40:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schnellste Möglichkeit, einen Vector zu leeren on Thu, 11 Jun 2009 12:40:37 GMT]]></title><description><![CDATA[<p>Hallo, ich habe in meinem Programm einen sehr großen Vector. Diesen möchte ich jetzt leeren. Welche Methode ist dabei die schnellste oder üblichste?</p>
<pre><code class="language-cpp">vector&lt;TYP&gt; grosser_vector;
//...

//Methode 1
vector&lt;TYP&gt; leerer_vector;
grosser_vector = leerer_vector;

//Methode 2
grosser_vector.resize(0);

//Methode 3
grosser_vector.clear();

//Methode 4
grosser_vector.erase( grosser_vector.begin() , grosser_vector.end() );

//Methode5
grosser_vector.assign(0,0); //ich glaube nicht, dass diese Methode wirklich &quot;sauber&quot; ist...

//Methode 6
while (!grosser_vector.empty())
    grosser_vector.pop_back();  //ich denke, das ist die langsamste Variante

//Methode 7
//ähnlich wie Methode 1:
vector&lt;TYP&gt; leerer_vector;
grosser_vector.swap( leerer_vector );
</code></pre>
<p>Welche dieser Methoden ist jetzt die schnellste bzw. üblichste?<br />
Anmerkung: Methode 7 habe ich mit in die Liste genommen, da keine der anderen Methoden ja wirklich Speicher freigibt und swap ja normalerweise sehr performant ist. Gibt es auch irgendeinen Weg (nicht destruktor), den Speicher des vectors freizugeben?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725019</guid><dc:creator><![CDATA[vectory]]></dc:creator><pubDate>Thu, 11 Jun 2009 12:40:37 GMT</pubDate></item><item><title><![CDATA[Reply to Schnellste Möglichkeit, einen Vector zu leeren on Thu, 11 Jun 2009 12:44:28 GMT]]></title><description><![CDATA[<p>#3: Allerdings kocht der auch nur mit Wasser und gibts nur zu Bequemlichkeit. Möglicherweise führt der auch nur ein erase(begin(),end()) aus ...<br />
Redest du überhaupt von std::vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725023</guid><dc:creator><![CDATA[Alberto]]></dc:creator><pubDate>Thu, 11 Jun 2009 12:44:28 GMT</pubDate></item><item><title><![CDATA[Reply to Schnellste Möglichkeit, einen Vector zu leeren on Thu, 11 Jun 2009 12:48:36 GMT]]></title><description><![CDATA[<p>Die übliche ist <code>std::vector::clear()</code> . In den meisten Fällen füllt man den Container anschliessend wieder, wodurch es schon einen Sinn hat, dass nicht der ganze Speicher freigegeben wird. Ansonsten würde ich mit einem leeren Container swappen, wenn man wirklich einen leeren Vector will.</p>
<p>Natürlich hängt das auch vom gegebenen Problem ab. Am besten machst du eine Zeitmessung für deine konkrete Anwendung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725027</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 11 Jun 2009 12:48:36 GMT</pubDate></item><item><title><![CDATA[Reply to Schnellste Möglichkeit, einen Vector zu leeren on Thu, 11 Jun 2009 12:49:32 GMT]]></title><description><![CDATA[<blockquote>
<p>Gibt es auch irgendeinen Weg (nicht destruktor), den Speicher des vectors freizugeben?</p>
</blockquote>
<p>Falls Du den Speicher freigeben möchtest der nicht mehr genutzt wird musst Du das mit swap(..) machen.</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725028</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Thu, 11 Jun 2009 12:49:32 GMT</pubDate></item><item><title><![CDATA[Reply to Schnellste Möglichkeit, einen Vector zu leeren on Thu, 11 Jun 2009 12:53:53 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<blockquote>
<p>Gibt es auch irgendeinen Weg (nicht destruktor), den Speicher des vectors freizugeben?</p>
</blockquote>
<p>Falls Du den Speicher freigeben möchtest der nicht mehr genutzt wird musst Du das mit swap(..) machen.</p>
</blockquote>
<p>Genauer: Es gibt keinen Weg. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725030</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 11 Jun 2009 12:53:53 GMT</pubDate></item><item><title><![CDATA[Reply to Schnellste Möglichkeit, einen Vector zu leeren on Thu, 11 Jun 2009 20:14:50 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>theta schrieb:</p>
<blockquote>
<blockquote>
<p>Gibt es auch irgendeinen Weg (nicht destruktor), den Speicher des vectors freizugeben?</p>
</blockquote>
<p>Falls Du den Speicher freigeben möchtest der nicht mehr genutzt wird musst Du das mit swap(..) machen.</p>
</blockquote>
<p>Genauer: Es gibt keinen Weg. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Keinen garantierten, aber swap() funktioniert im Allgemeinen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725263</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 11 Jun 2009 20:14:50 GMT</pubDate></item><item><title><![CDATA[Reply to Schnellste Möglichkeit, einen Vector zu leeren on Thu, 11 Jun 2009 20:48:18 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Keinen garantierten, aber swap() funktioniert im Allgemeinen.</p>
</blockquote>
<p>Ich meinte damit keinen Weg, ohne den Destruktor aufzurufen. Mit <code>swap()</code> nutzt man ja die Gegebenheit aus, dass das getauschte Objekt den Speicher am Ende des Scopes über den Destruktor freigibt.</p>
<p>Genaugenommen ruft man den Dtor natürlich nicht beim Originalobjekt auf. Aber ich meinte grundsätzlich Freigeben bei <code>std::vector</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725290</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 11 Jun 2009 20:48:18 GMT</pubDate></item><item><title><![CDATA[Reply to Schnellste Möglichkeit, einen Vector zu leeren on Thu, 11 Jun 2009 22:11:28 GMT]]></title><description><![CDATA[<p>also wäre es am besten folgendes zu machen?</p>
<pre><code class="language-cpp">vector&lt;TYP&gt; grosser_vector;
//... vector füllen

{ //neuer gültigkeitsbereich

    vector&lt;TYP&gt; neuer_vector;
    grosser_vector.swap(neuer_vector);

} //hier ist der alte vector leeer und der allokierte Speicher freigegeben
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1725339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725339</guid><dc:creator><![CDATA[vectory]]></dc:creator><pubDate>Thu, 11 Jun 2009 22:11:28 GMT</pubDate></item><item><title><![CDATA[Reply to Schnellste Möglichkeit, einen Vector zu leeren on Thu, 11 Jun 2009 22:32:51 GMT]]></title><description><![CDATA[<p>vectory schrieb:</p>
<blockquote>
<p>also wäre es am besten folgendes zu machen?</p>
<pre><code class="language-cpp">vector&lt;TYP&gt; grosser_vector;
//... vector füllen

{ //neuer gültigkeitsbereich

    vector&lt;TYP&gt; neuer_vector;
    grosser_vector.swap(neuer_vector);

} //hier ist der alte vector leeer und der allokierte Speicher freigegeben
</code></pre>
</blockquote>
<p>ja.<br />
man kanns auch als</p>
<pre><code class="language-cpp">grosser_vector.swap(vector&lt;TYP&gt;());
</code></pre>
<p>schreiben, geschmachssache.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725342</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 11 Jun 2009 22:32:51 GMT</pubDate></item><item><title><![CDATA[Reply to Schnellste Möglichkeit, einen Vector zu leeren on Thu, 11 Jun 2009 22:48:55 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>ja.<br />
man kanns auch als</p>
<pre><code class="language-cpp">grosser_vector.swap(vector&lt;TYP&gt;());
</code></pre>
<p>schreiben, geschmachssache.</p>
</blockquote>
<p>Nein, man darf Non-Const-Referenzen nicht an temporäre Objekte binden.</p>
<p>Wenn schon, dann so:</p>
<pre><code class="language-cpp">vector&lt;TYP&gt;().swap(grosser_vector);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1725347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725347</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 11 Jun 2009 22:48:55 GMT</pubDate></item></channel></rss>