<?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[push_back bei std::list 3X langsamer als bei std::vector]]></title><description><![CDATA[<p>Ich habe ein Programm, dass ich eigentlich mit Hilfe einer linked list optimieren wollte, weil dort ein std::vector sehr oft resized wird.<br />
Allerdings ist die Implementation meiner linked list sehr viel langsamer ):<br />
Da der Inhalt in meinem Programm um einiges größer als ein int sein wird, ahne ich bereits Schlimmeres.<br />
Woran liegt dieses unerwartete Verhalten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<pre><code>namespace ANN {

template&lt;class T&gt;
class vector : public std::list&lt;T&gt; {
public:
	vector()  : std::list&lt;T&gt;() {};
	vector(int n, const T&amp; value = T() ) : std::list&lt;T&gt;(n, value) {};

	T &amp;at(const unsigned int &amp;iPos) {
		assert(iPos &lt; this-&gt;size() );
		unsigned int i = iPos;
		for(typename std::list&lt;T&gt;::iterator it = this-&gt;begin(); it != this-&gt;end(); it++) {
			if(i == 0) {
				return *it;
			}
			i--;
		}
	}

	const T at(const unsigned int &amp;iPos) const {
		assert(iPos &lt; this-&gt;size() );
		unsigned int i = iPos;
		for(typename std::list&lt;T&gt;::const_iterator it = this-&gt;begin(); it != this-&gt;end(); it++) {
			if(i == 0) {
				return *it;
			}
			i--;
		}
		return T();	// error return
	}

	T&amp; operator[](const unsigned int&amp; iPos) {
		return this-&gt;at(iPos);
	}

	const T&amp; operator[](const unsigned int&amp; iPos) const {
		return this-&gt;at(iPos);
	}
};
</code></pre>
<pre><code>#include &lt;iostream&gt;
#include &lt;ANVector.h&gt;
#include &lt;vector&gt;

#include &lt;sys/times.h&gt;

using namespace std;

int main(void) {
	unsigned int max = 100000000;

	long T1, T2;
	struct tms start_time, stop_time;

	T1 = times(&amp;start_time);
	ANN::vector&lt;int&gt; vec;
	for(int i = 0; i &lt; max; i++) {
		vec.push_front(i);
	}
	T2 = times(&amp;stop_time);
	printf (&quot;Execute Time for Loop: %d\n&quot;, T2-T1);

	T1 = times(&amp;start_time);
	std::vector&lt;int&gt; vec2;
	for(int i = 0; i &lt; max; i++) {
		vec2.push_back(i);
	}
	T2 = times(&amp;stop_time);
	printf (&quot;Execute Time for Loop: %d\n&quot;, T2-T1);

	/*
	for(int i = 0; i &lt; max; i++) {
		std::cout&lt;&lt;vec.at(i)&lt;&lt;std::endl;
	}
	*/
	return 0;
}
</code></pre>
<pre><code>Execute Time for Loop: 381
Execute Time for Loop: 39
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/311000/push_back-bei-std-list-3x-langsamer-als-bei-std-vector</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 00:32:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/311000.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 Nov 2012 16:38:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sat, 24 Nov 2012 16:38:00 GMT]]></title><description><![CDATA[<p>Ich habe ein Programm, dass ich eigentlich mit Hilfe einer linked list optimieren wollte, weil dort ein std::vector sehr oft resized wird.<br />
Allerdings ist die Implementation meiner linked list sehr viel langsamer ):<br />
Da der Inhalt in meinem Programm um einiges größer als ein int sein wird, ahne ich bereits Schlimmeres.<br />
Woran liegt dieses unerwartete Verhalten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<pre><code>namespace ANN {

template&lt;class T&gt;
class vector : public std::list&lt;T&gt; {
public:
	vector()  : std::list&lt;T&gt;() {};
	vector(int n, const T&amp; value = T() ) : std::list&lt;T&gt;(n, value) {};

	T &amp;at(const unsigned int &amp;iPos) {
		assert(iPos &lt; this-&gt;size() );
		unsigned int i = iPos;
		for(typename std::list&lt;T&gt;::iterator it = this-&gt;begin(); it != this-&gt;end(); it++) {
			if(i == 0) {
				return *it;
			}
			i--;
		}
	}

	const T at(const unsigned int &amp;iPos) const {
		assert(iPos &lt; this-&gt;size() );
		unsigned int i = iPos;
		for(typename std::list&lt;T&gt;::const_iterator it = this-&gt;begin(); it != this-&gt;end(); it++) {
			if(i == 0) {
				return *it;
			}
			i--;
		}
		return T();	// error return
	}

	T&amp; operator[](const unsigned int&amp; iPos) {
		return this-&gt;at(iPos);
	}

	const T&amp; operator[](const unsigned int&amp; iPos) const {
		return this-&gt;at(iPos);
	}
};
</code></pre>
<pre><code>#include &lt;iostream&gt;
#include &lt;ANVector.h&gt;
#include &lt;vector&gt;

#include &lt;sys/times.h&gt;

using namespace std;

int main(void) {
	unsigned int max = 100000000;

	long T1, T2;
	struct tms start_time, stop_time;

	T1 = times(&amp;start_time);
	ANN::vector&lt;int&gt; vec;
	for(int i = 0; i &lt; max; i++) {
		vec.push_front(i);
	}
	T2 = times(&amp;stop_time);
	printf (&quot;Execute Time for Loop: %d\n&quot;, T2-T1);

	T1 = times(&amp;start_time);
	std::vector&lt;int&gt; vec2;
	for(int i = 0; i &lt; max; i++) {
		vec2.push_back(i);
	}
	T2 = times(&amp;stop_time);
	printf (&quot;Execute Time for Loop: %d\n&quot;, T2-T1);

	/*
	for(int i = 0; i &lt; max; i++) {
		std::cout&lt;&lt;vec.at(i)&lt;&lt;std::endl;
	}
	*/
	return 0;
}
</code></pre>
<pre><code>Execute Time for Loop: 381
Execute Time for Loop: 39
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2274248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274248</guid><dc:creator><![CDATA[dgrat_87]]></dc:creator><pubDate>Sat, 24 Nov 2012 16:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sat, 24 Nov 2012 17:01:00 GMT]]></title><description><![CDATA[<p>Der vector holt sich auf Verdacht nur in gewissen Abständen neuen Speicher, so oft wie du denkst muss da nichts neu angefordert werden. Eine liste ist nur dann sinnvoll, wenn du Elemente in der Mitte einfügen/löschen willst, und das der größte Performance-Faktor ist. Falls Elemente schnell vorne eingefügt werden müssen, bietet sich eine deque an.</p>
<p>PS: vector von list erben ist mal eine ganz schlechte Idee, was hast du dir denn dabei gedacht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274256</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 24 Nov 2012 17:01:00 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sat, 24 Nov 2012 17:29:19 GMT]]></title><description><![CDATA[<p>Tatsächlich allokiert vector nicht einfach ein Array das nur alle Elemente halten kann, sondern es allokiert jedes mal (jedes mal wahrscheinlich nicht, aber oft) ein Array das noch zusätzliche, noch nicht vorhandene Elemente aufnehmen kann damit nicht immer bei jedem einfügen Speicher reallokiert werden muss.</p>
<p>Der Standard sagt zu den modifizierenden Memberfunktionen:</p>
<blockquote>
<p>Causes reallocation if the new size is greater than the old capacity.</p>
</blockquote>
<p>Die Kapazität, die durch die Memberfunktion capacity() zurückgegeben wird, bestimmt, wie viele Elemente der <code>vector</code> noch aufnehmen kann bevor eine Reallokation stattfinden muss.<br />
Standard:</p>
<blockquote>
<pre><code>size_type capacity() const noexcept;
</code></pre>
<p><em>1</em> Returns: The total number of elements that the vector can hold without requiring reallocation.</p>
</blockquote>
<p>Was auch in diesem Zusammenhang sehr wichtig ist, ist die Memberfunktion <code>reserve()</code> , die schon im Voraus eine Reallokation erzwingen kann:</p>
<blockquote>
<pre><code>void reserve(size_type n);
</code></pre>
<p><em>2</em> Effects: <strong>A directive that informs a vector of a planned change in size, so that it can manage the storage<br />
allocation accordingly.</strong> After reserve(), capacity() is greater or equal to the argument of reserve if<br />
reallocation happens; and equal to the previous value of capacity() otherwise. Reallocation happens<br />
at this point if and only if the current capacity is less than the argument of reserve(). [....]</p>
</blockquote>
<p>Das ist sehr nützlich, falls man weiß das gleich der Vektor sehr groß werden wird, und in bspw. einem Schleifendurchlauf die ganze Zeit neue Elemente, vielleicht sogar einzeln, bekommt.<br />
Dann ist es entspannt, wenn man im Voraus die Kapazität entsprechend groß macht und dadurch eine Reallokation möglicherweise ganz umgeht (was z. T. viel Zeit spart).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274270</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 24 Nov 2012 17:29:19 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sat, 24 Nov 2012 17:27:30 GMT]]></title><description><![CDATA[<p>Es macht mich bei theoretisch 10^7 möglichen re-alloks alelrdings schon stutzig, dass vector 10x schneller ist, als list.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274280</guid><dc:creator><![CDATA[dgrat_87]]></dc:creator><pubDate>Sat, 24 Nov 2012 17:27:30 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sat, 24 Nov 2012 17:29:35 GMT]]></title><description><![CDATA[<p>Ich werde das mal mit größeren Daten testen. Es kann nicht bei jeder typ-größe dermaßen vorreserviert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274281</guid><dc:creator><![CDATA[dgrat_87]]></dc:creator><pubDate>Sat, 24 Nov 2012 17:29:35 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sat, 24 Nov 2012 17:37:48 GMT]]></title><description><![CDATA[<p>Dein ganzes Vorgehen ist ziemlich sinnlos. Du nimmst eine std::list um daraus ein vector zu machen. Warum nimmst du nicht gleich den std::vector?</p>
<p>Und dann erbst du von std::list und überschreibst irgendwelche Methoden... Damit zerstörst du evtl. die interne Struktur der std::list und lässt sie erst so ineffizient werden.</p>
<p>Mein Vorschlag: Nimm was aus der STL und programmier erst mal weiter. Sollte es später tatsächlich Probleme geben, kannst du das ganze noch immer austauschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274284</guid><dc:creator><![CDATA[dfgdfg]]></dc:creator><pubDate>Sat, 24 Nov 2012 17:37:48 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sat, 24 Nov 2012 17:41:36 GMT]]></title><description><![CDATA[<p>dgrat_87 schrieb:</p>
<blockquote>
<p>Es macht mich bei theoretisch 10^7 möglichen re-alloks alelrdings schon stutzig, dass vector 10x schneller ist, als list.</p>
</blockquote>
<p>Wenn du den gcc/clang verwendest, die libstdc++ Implementierung allokiert immer doppelt so viel. Also nichtmal annähernd so viele Allokationen.</p>
<p>Dabei ist Faktor 2 eine schlechte Idee, wie hier erklärt wird: <a href="https://github.com/facebook/folly/blob/master/folly/docs/FBVector.md" rel="nofollow">https://github.com/facebook/folly/blob/master/folly/docs/FBVector.md</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274287</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 24 Nov 2012 17:41:36 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sat, 24 Nov 2012 17:46:34 GMT]]></title><description><![CDATA[<p>dfgdfg schrieb:</p>
<blockquote>
<p>Und dann erbst du von std::list und überschreibst irgendwelche Methoden... Damit zerstörst du evtl. die interne Struktur der std::list und lässt sie erst so ineffizient werden.</p>
</blockquote>
<p>Er überschreibt nix ... at() und operator[] wurden absichtlich bei std::list nicht implementiert, weil eine Liste eben nur extrem ineffizient random-access anbieten kann.</p>
<pre><code>std::list&lt;int&gt; list = ...;
for(int i = 0; i &lt; n; ++i)
    do_something(list[i]);
</code></pre>
<p>hätte eine Komplexität von n!, totale Katastrophe also.</p>
<p>Edit: Nix Fakultät, gerade etwas daneben, aber immer noch katastrophale Laufzeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274288</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 24 Nov 2012 17:46:34 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sat, 24 Nov 2012 18:00:00 GMT]]></title><description><![CDATA[<p>dgrat_87 schrieb:</p>
<blockquote>
<p>Es kann nicht bei jeder typ-größe dermaßen vorreserviert werden.</p>
</blockquote>
<p>Warum kann nicht?<br />
Ob</p>
<pre><code>#include &lt;vector&gt;
#include &lt;iostream&gt;
int main()
{
    std::vector&lt;int&gt; v;
    auto c(v.capacity());
    // Wir push_backend tausend mal was in einen Vector.
    for (int i(0); i &lt; 1000; ++i)
    {
        v.push_back(i);
        // Wenn sie die Kapazitaet geaendert hat,
        // also neu allokiert und umkopiert wurde ....
        if (v.capacity()!=c)
        {
            c = v.capacity();
            // ... geben wir das aus.
            std::cout &lt;&lt; c &lt;&lt; std::endl;
        }
    }
}
</code></pre>
<p>oder</p>
<pre><code>#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;array&gt;
int main()
{
    std::vector&lt;std::array&lt;int,3000&gt;&gt; v;
    auto c(v.capacity());
    // Wir push_backend tausend mal was in einen Vector.
    for (int i(0); i &lt; 1000; ++i)
    {
        v.push_back(std::array&lt;int,3000&gt;());
        // Wenn sie die Kapazitaet geaendert hat,
        // also neu allokiert und umkopiert wurde ....
        if (v.capacity()!=c)
        {
            c = v.capacity();
            // ... geben wir das aus.
            std::cout &lt;&lt; c &lt;&lt; std::endl;
        }
    }
}
</code></pre>
<p>die Ausgabe des executables, das mein Compiler daraus macht, ist in beiden Fällen diese:</p>
<pre><code>1
2
4
8
16
32
64
128
256
512
1024
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2274293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274293</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Sat, 24 Nov 2012 18:00:00 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sat, 24 Nov 2012 20:35:45 GMT]]></title><description><![CDATA[<p>Wie ich vermutet habe. Die Liste wird schneller, wenn die Objektgröße steigt.<br />
Ab einer gewissen Größe wirft vector zudem nen bad alloc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274354</guid><dc:creator><![CDATA[dgrat_87]]></dc:creator><pubDate>Sat, 24 Nov 2012 20:35:45 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sat, 24 Nov 2012 20:43:02 GMT]]></title><description><![CDATA[<p>Wenn die Objektgröße auf was steigt? 100MB? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274356</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 24 Nov 2012 20:43:02 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sun, 25 Nov 2012 08:01:23 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> Ganz so schlimm ist es nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274404</guid><dc:creator><![CDATA[dgrat_87]]></dc:creator><pubDate>Sun, 25 Nov 2012 08:01:23 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sun, 25 Nov 2012 08:14:22 GMT]]></title><description><![CDATA[<p>Reservier halt mit reserve(). Dann kannste in den vector vermutlich mehr reinstopfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274406</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sun, 25 Nov 2012 08:14:22 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sun, 25 Nov 2012 08:20:54 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Reservier halt mit reserve(). Dann kannste in den vector vermutlich mehr reinstopfen.</p>
</blockquote>
<p>Das bringt nichts. <code>reserve()</code> vergrößert <code>max_size()</code> nicht. <code>reserve()</code> kann lediglich viele Reallokationen verhindern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274407</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 25 Nov 2012 08:20:54 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sun, 25 Nov 2012 08:24:53 GMT]]></title><description><![CDATA[<p>Das bringt sehr wohl was, wenn der benoetigte Speicher + der momentane Speicher = temporaer waehrend einer Reallokation gebrauchte Speicher den verfuegbaren Speicher ueberschreiten, aber der benoetigte Speicher geringer ist als der verfuegbare.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274408</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sun, 25 Nov 2012 08:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sun, 25 Nov 2012 08:57:16 GMT]]></title><description><![CDATA[<p>Wie die meisten hier vermuten lag das Problem nicht an std::vector, sondern an einer andern Stelle begraben.<br />
Von daher bleibe ich beim gewohnten std::vector <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /><br />
Reserve benutze ich btw. soweit es geht immer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /> Es sei denn ich stell hier nen kleines snippet rein.<br />
Ich wusste allerdings nicht, dass der std::vector in zweierpotenzen von allein reserved <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/2274410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274410</guid><dc:creator><![CDATA[dgrat_87]]></dc:creator><pubDate>Sun, 25 Nov 2012 08:57:16 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sun, 25 Nov 2012 08:59:44 GMT]]></title><description><![CDATA[<p>BTW: Eigentlich benutz ich resize() statt reserve().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274411</guid><dc:creator><![CDATA[dgrat_87]]></dc:creator><pubDate>Sun, 25 Nov 2012 08:59:44 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sun, 25 Nov 2012 09:17:06 GMT]]></title><description><![CDATA[<p>Du weißt aber schon, dass resize was ganz anderes macht als reseve? <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="🙂"
    /><br />
<a href="http://en.cppreference.com/w/cpp/container/vector/resize" rel="nofollow">http://en.cppreference.com/w/cpp/container/vector/resize</a><br />
<a href="http://en.cppreference.com/w/cpp/container/vector/reserve" rel="nofollow">http://en.cppreference.com/w/cpp/container/vector/reserve</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274413</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Sun, 25 Nov 2012 09:17:06 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sun, 25 Nov 2012 11:48:35 GMT]]></title><description><![CDATA[<p>Mittlerweile schon <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> Vielleicht werde ich zukünftig auch mal reserv-ieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274440</guid><dc:creator><![CDATA[dgrat_87]]></dc:creator><pubDate>Sun, 25 Nov 2012 11:48:35 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sun, 25 Nov 2012 22:52:13 GMT]]></title><description><![CDATA[<p>dgrat_87 schrieb:</p>
<blockquote>
<p>Ich wusste allerdings nicht, dass der std::vector in zweierpotenzen von allein reserved <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>
</blockquote>
<p>MSVC nimmt soweit ich weiss 3/2.<br />
Es muss aber immer abhängig von der vorherigen Grösse sein - mit fixen Schritten könnte man die Forderungen des Standards nicht hinbekommen (amortisiert konstante Zeit für <code>push_back</code> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274648</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 25 Nov 2012 22:52:13 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Sun, 25 Nov 2012 23:13:55 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Es muss aber <strong>immer</strong> abhängig von der vorherigen Grösse sein - mit fixen Schritten könnte man die Forderungen des Standards nicht hinbekommen</p>
</blockquote>
<p>Könnte auch abhängig von den Ticks seit Systemstart sein. Oder abhängig von den bisher erledigten Reallokationen des Vektors (ist unabhängig von der Grösse wenn es durch swap() nicht verändert wird).</p>
<p>Jedenfalls muss immer mehr allokiert werden je grösser der Vektor wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274652</guid><dc:creator><![CDATA[americanjurist]]></dc:creator><pubDate>Sun, 25 Nov 2012 23:13:55 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Mon, 26 Nov 2012 09:46:53 GMT]]></title><description><![CDATA[<p>@americanjurist<br />
Ja std::vector könnte sich auch gleich den gesamten Speicher der Maschine grabschen. Unsinnige Alternativen sind leicht zu finden. Wenn du was an meinem <em>immer</em> zu kritisieren hast, dann bitte mit einen realistischen Gegenvorschlag.</p>
<p>Wir können uns aber auch gerne darauf einigen dass es keine <em>sinnvolle</em> Alternative gibt als die Wachstumsschritte von der alten Grösse abhängig zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274712</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 26 Nov 2012 09:46:53 GMT</pubDate></item><item><title><![CDATA[Reply to push_back bei std::list 3X langsamer als bei std::vector on Mon, 26 Nov 2012 12:32:14 GMT]]></title><description><![CDATA[<p>americanjurist schrieb:</p>
<blockquote>
<p>Könnte auch abhängig von den Ticks seit Systemstart sein. Oder abhängig von den bisher erledigten Reallokationen des Vektors (ist unabhängig von der Grösse wenn es durch swap() nicht verändert wird).</p>
</blockquote>
<p>Beides erfüllt die Vorgaben des Standards über das Laufzeitverhalten der Operationen auf std::vector nicht, also könnte das gerade nicht sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274760</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 26 Nov 2012 12:32:14 GMT</pubDate></item></channel></rss>