<?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[vector&amp;lt;T&amp;gt;::push_back() Performance]]></title><description><![CDATA[<p>Hi,<br />
für ein kleines 2D Spiel habe ich eine Figur, die per *.png Frames in 8 Richtungen animiert wird. Zu diesem Zweck lade ich die Frames in einen Vector, der denselben dann an die Klasse der Figur zurückgibt.</p>
<pre><code class="language-cpp">std::vector&lt;sf::Image&gt; CImageManager::LoadImages(std::string path, int numOfFrames)
{
	std::string file;
	std::vector&lt;sf::Image&gt; vReturn;

	sf::Image tempImage;

	char buffer[3];
	int temp;

	vReturn.reserve(numOfFrames);

	for(int i = 1; i &lt;= numOfFrames; i++) {
		temp = i;

		file.append(path);
		file.append(itoa(temp, buffer, 10));
		file.append(&quot;.png&quot;);

		if(!tempImage.LoadFromFile(file))
			printf(&quot;Unable to load Frame\n&quot;);

		vReturn.push_back(tempImage);

		file.clear();
	}

	return vReturn;
}
</code></pre>
<p>Jetzt ist es so, dass pro push_back() etwa 0.12 Sekunden vergehen. Bei derzeit 112 Frames macht das 13 Sekunden Ladezeit nur für die Bilder (+ Ladezeit für tempImage.LoadFromFile(file);)</p>
<p>Gibt es irgendeine Möglichkeit das zu optimieren? Oder vielleicht einen ganz anderen Weg, um da Zeit einzusparen.</p>
<p>Wäre für eure Hilfe sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/278845/vector-lt-t-gt-push_back-performance</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 23:22:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278845.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Dec 2010 22:55:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector&amp;lt;T&amp;gt;::push_back() Performance on Mon, 13 Dec 2010 22:55:20 GMT]]></title><description><![CDATA[<p>Hi,<br />
für ein kleines 2D Spiel habe ich eine Figur, die per *.png Frames in 8 Richtungen animiert wird. Zu diesem Zweck lade ich die Frames in einen Vector, der denselben dann an die Klasse der Figur zurückgibt.</p>
<pre><code class="language-cpp">std::vector&lt;sf::Image&gt; CImageManager::LoadImages(std::string path, int numOfFrames)
{
	std::string file;
	std::vector&lt;sf::Image&gt; vReturn;

	sf::Image tempImage;

	char buffer[3];
	int temp;

	vReturn.reserve(numOfFrames);

	for(int i = 1; i &lt;= numOfFrames; i++) {
		temp = i;

		file.append(path);
		file.append(itoa(temp, buffer, 10));
		file.append(&quot;.png&quot;);

		if(!tempImage.LoadFromFile(file))
			printf(&quot;Unable to load Frame\n&quot;);

		vReturn.push_back(tempImage);

		file.clear();
	}

	return vReturn;
}
</code></pre>
<p>Jetzt ist es so, dass pro push_back() etwa 0.12 Sekunden vergehen. Bei derzeit 112 Frames macht das 13 Sekunden Ladezeit nur für die Bilder (+ Ladezeit für tempImage.LoadFromFile(file);)</p>
<p>Gibt es irgendeine Möglichkeit das zu optimieren? Oder vielleicht einen ganz anderen Weg, um da Zeit einzusparen.</p>
<p>Wäre für eure Hilfe sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1994135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1994135</guid><dc:creator><![CDATA[Cloppy]]></dc:creator><pubDate>Mon, 13 Dec 2010 22:55:20 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;T&amp;gt;::push_back() Performance on Mon, 13 Dec 2010 23:08:25 GMT]]></title><description><![CDATA[<p>Vielleicht hast du sogar eine ganz grosse Kopie beim Rückgabetyp. Tendenziell eher einen Output-Parameter nehmen (um auf der sicheren Seite zu sein, vielleicht optimiert dein Compiler die Kopie weg):</p>
<pre><code class="language-cpp">ImageManager::LoadImages(std::string path, int numOfFrames, std::vector&lt;sf::Image&gt;&amp; out)
</code></pre>
<p>Dann <code>sf::Image</code> zuerst mit <code>push_back()</code> einfügen, und dann über <code>back()</code> anschliessend innerhalb des Containers bearbeiten.</p>
<p>Im Weiteren würde ich zum String-Zusammenbasteln <code>std::stringstream</code> nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1994138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1994138</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 13 Dec 2010 23:08:25 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;T&amp;gt;::push_back() Performance on Mon, 13 Dec 2010 23:23:40 GMT]]></title><description><![CDATA[<p>NRVO erwarte ich heutzutage eigentlich von jedem Compiler. Meine Vermutung ist, dass die Kope des sf::Image-Objekts jeweils so lange dauert, wenn es an den Vektor angehängt wird.</p>
<p>Da sf::Image DefaultConstructible zu sein scheint, ginge es vielleicht so:</p>
<pre><code class="language-cpp">std::vector&lt;sf::Image&gt; CImageManager::LoadImages(std::string path, int numOfFrames)
{
    std::ostringstream fmt;
    std::vector&lt;sf::Image&gt; vReturn(numOfFrames);

    vReturn.reserve(numOfFrames);

    for(int i = 0; i &lt; numOfFrames; i++) {
        fmt.clear();
        fmt.str(path);
        fmt &lt;&lt; i + 1 &lt;&lt; &quot;.png&quot;;

        if(!vReturn[i].LoadFromFile(fmt.str())) {
            std::cerr &lt;&lt; &quot;Unable to load Frame&quot; &lt;&lt; std::endl;
        }
    }

    return vReturn;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1994143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1994143</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 13 Dec 2010 23:23:40 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;T&amp;gt;::push_back() Performance on Mon, 13 Dec 2010 23:24:56 GMT]]></title><description><![CDATA[<p>Bah. Flüchtigkeitsfehler: Die Zeile</p>
<pre><code class="language-cpp">vReturn.reserve(numOfFrames);
</code></pre>
<p>ist dann unnötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1994144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1994144</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 13 Dec 2010 23:24:56 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;T&amp;gt;::push_back() Performance on Mon, 13 Dec 2010 23:42:07 GMT]]></title><description><![CDATA[<p>Okay,<br />
hab das umgesetzt, hat einiges gebracht.<br />
Habe die Bilder noch etwas zusammengeschnitten, habe gemerkt, dass der Großteil der Frames aus Transparenz besteht, also habe ich die Teile weggeschnitten.<br />
Die 114 Frames laden dauert nun keine Sekunde mehr.</p>
<p>Danke für die allgemein sehr hilfreichen Tipps! <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/1994148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1994148</guid><dc:creator><![CDATA[Cloppy]]></dc:creator><pubDate>Mon, 13 Dec 2010 23:42:07 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;T&amp;gt;::push_back() Performance on Mon, 13 Dec 2010 23:53:13 GMT]]></title><description><![CDATA[<p>Nur um mal sicher zu gehen: du hast Optimierungen bei deinem Compiler angeschaltet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1994151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1994151</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Mon, 13 Dec 2010 23:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;T&amp;gt;::push_back() Performance on Tue, 14 Dec 2010 00:05:01 GMT]]></title><description><![CDATA[<p>Athar schrieb:</p>
<blockquote>
<p>Nur um mal sicher zu gehen: du hast Optimierungen bei deinem Compiler angeschaltet?</p>
</blockquote>
<p>Ich vermute eher Debug-Build ohne Optimierungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1994154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1994154</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Tue, 14 Dec 2010 00:05:01 GMT</pubDate></item></channel></rss>