<?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[Temporäres Objekt vs push_back, pop_back - Was ist besser?]]></title><description><![CDATA[<p>Folgendes gilt für beide Codeschnipsel:</p>
<pre><code>struct pod {
    // nicht sooo groß
};
//...
std::vector &lt;pod&gt; vec;
</code></pre>
<p>Die Frage ist: Lieber greedy hinzufügen, oder temporäres Objekt erstellen.<br />
(Oder doch eher ganz anders?)</p>
<p>folgende Schnipsel stehen sich gegenüber:</p>
<pre><code>for (auto i = container.begin(); /* some loop stuff ;) */) {
    pod temp = getBlaBla(*i);
    if (temp.member == MEMBER_INVALID)
        throw(&quot;blubber&quot;);
    vec.push_back(temp);
}
</code></pre>
<pre><code>for (auto i = container.begin(); /* some loop stuff ;) */) {
    vec.push_back(getBlaBla(*i));
    if(vec.rbegin()-&gt;member == MEMBER_INVALID)
        throw(&quot;blubber&quot;);
}
</code></pre>
<p>oder Scenario 2. Selbe Grundstruktur, nur keine Exception:</p>
<pre><code>for (auto i = container.begin(); /* some loop stuff ;) */) {
    pod temp = getBlaBla(*i);
    if (temp.member != MEMBER_INVALID)
        vec.push_back(temp);
}
</code></pre>
<pre><code>for (auto i = container.begin(); /* some loop stuff ;) */) {
    vec.push_back(getBlaBla(*i));
    if(vec.rbegin()-&gt;member == MEMBER_INVALID)
        vec.pop_back();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/317058/temporäres-objekt-vs-push_back-pop_back-was-ist-besser</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 10:36:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317058.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 26 May 2013 00:55:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Temporäres Objekt vs push_back, pop_back - Was ist besser? on Sun, 26 May 2013 00:56:07 GMT]]></title><description><![CDATA[<p>Folgendes gilt für beide Codeschnipsel:</p>
<pre><code>struct pod {
    // nicht sooo groß
};
//...
std::vector &lt;pod&gt; vec;
</code></pre>
<p>Die Frage ist: Lieber greedy hinzufügen, oder temporäres Objekt erstellen.<br />
(Oder doch eher ganz anders?)</p>
<p>folgende Schnipsel stehen sich gegenüber:</p>
<pre><code>for (auto i = container.begin(); /* some loop stuff ;) */) {
    pod temp = getBlaBla(*i);
    if (temp.member == MEMBER_INVALID)
        throw(&quot;blubber&quot;);
    vec.push_back(temp);
}
</code></pre>
<pre><code>for (auto i = container.begin(); /* some loop stuff ;) */) {
    vec.push_back(getBlaBla(*i));
    if(vec.rbegin()-&gt;member == MEMBER_INVALID)
        throw(&quot;blubber&quot;);
}
</code></pre>
<p>oder Scenario 2. Selbe Grundstruktur, nur keine Exception:</p>
<pre><code>for (auto i = container.begin(); /* some loop stuff ;) */) {
    pod temp = getBlaBla(*i);
    if (temp.member != MEMBER_INVALID)
        vec.push_back(temp);
}
</code></pre>
<pre><code>for (auto i = container.begin(); /* some loop stuff ;) */) {
    vec.push_back(getBlaBla(*i));
    if(vec.rbegin()-&gt;member == MEMBER_INVALID)
        vec.pop_back();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2326179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326179</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Sun, 26 May 2013 00:56:07 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäres Objekt vs push_back, pop_back - Was ist besser? on Sun, 26 May 2013 04:16:07 GMT]]></title><description><![CDATA[<p>TempObject</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326182</guid><dc:creator><![CDATA[inTime]]></dc:creator><pubDate>Sun, 26 May 2013 04:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäres Objekt vs push_back, pop_back - Was ist besser? on Sun, 26 May 2013 05:37:53 GMT]]></title><description><![CDATA[<p>Verwende das temporäre Objekt.<br />
Das Objekt einmal mehr zu kopieren ist weit empfehlenswerter, als es ungültig in den Vektor zu packen und dann mit dessen Iterator den Wert wieder rauszuholen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326183</guid><dc:creator><![CDATA[Youka]]></dc:creator><pubDate>Sun, 26 May 2013 05:37:53 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäres Objekt vs push_back, pop_back - Was ist besser? on Sun, 26 May 2013 06:42:15 GMT]]></title><description><![CDATA[<p>Wieso überhaupt kopieren? Was ist getBlaBla?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326186</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sun, 26 May 2013 06:42:15 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäres Objekt vs push_back, pop_back - Was ist besser? on Sun, 26 May 2013 07:08:51 GMT]]></title><description><![CDATA[<p>Ich würde hier auch einfach</p>
<pre><code>pod const&amp; temp = getBlaBla(*i);
</code></pre>
<p>verwenden.<br />
(ob das unter C++11 allerdings noch eine Rolle spielt, weiß ich nicht <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>
<p>Gegen vector&lt;T&gt;.push_back() spricht auch, daß dann evtl. einmal Speicher neu reserviert werden würde (falls gerade size() &gt;= capacity() wird).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326188</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sun, 26 May 2013 07:08:51 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäres Objekt vs push_back, pop_back - Was ist besser? on Sun, 26 May 2013 10:14:12 GMT]]></title><description><![CDATA[<p>Wenn getBlaBla(...) ein PR-Value ist, dann gibt es so ein &quot;temporäres Objekt&quot; so oder so. &quot;temp object versus push_back/popback&quot; wäre dann falsch.</p>
<p>Vorschlag:</p>
<pre><code class="language-cpp">#define FORWARD(x) std::forward&lt;decltype(x)&gt;(x)

for (auto i = container.begin(); /* some loop stuff ;) */) {
    auto&amp;&amp; thing = getBlaBla(*i);
    if (thing.member != MEMBER_INVALID)
        vec.push_back(FORWARD(thing));
}
</code></pre>
<p>Das sollte etwas sinnvolles machen, unabhängig davon, ob getBlaBla eine Referenz zurück gibt oder nicht, und unabhängig davon, ob thing sich auf ein POD-Objekt bezieht oder nicht.</p>
<p>Ob du da jetzt irgendwo eine Ausnahme werfen solltest, kann ich nicht beurteilen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326194</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 26 May 2013 10:14:12 GMT</pubDate></item><item><title><![CDATA[Reply to Temporäres Objekt vs push_back, pop_back - Was ist besser? on Sun, 26 May 2013 09:14:39 GMT]]></title><link>https://www.c-plusplus.net/forum/post/2326200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326200</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 26 May 2013 09:14:39 GMT</pubDate></item></channel></rss>