<?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[[rückgabewert] optimale lsg gesucht]]></title><description><![CDATA[<pre><code class="language-cpp">struct X{
vector&lt;XYZ&gt; getVector()
{
   vector&lt;XYZ&gt; tmp; 
   ... *fill vector with objects*
   return tmp;
};

int main()
{
   X a;

   vector&lt;XYZ&gt;&amp; vec1 = a.getVector();  //A
   vector&lt;XYZ&gt;  vec2 = a.getVector();  //B
   vec2 = a.getVector();               //C
}
</code></pre>
<p><strong>Frage</strong>: Welche Variante ist Laufzeitechnisch und v.a. speichertechnisch unter der Anahme von laaaaangen, speicherintensiven vektoren zu bevorzugen?</p>
<p>Wie oft wird bei <strong>A</strong>, <strong>B</strong> und <strong>C</strong> kopiert ?</p>
<p>Ich gehe derzeit von folgenden worst case Szenarien aus (also ohne compiler-optimierungen):<br />
<strong>A</strong> 1 Kopie bei <em>return tmp</em><br />
<strong>B</strong> 1 Kopie bei <em>return tmp</em>, 1 Kopie durch aufruf des copy-konstruktos von vector<br />
<strong>C</strong> 1 Kopie bei <em>return tmp</em>, 1 Kopie durch aufruf des zuweisungs-operator von vector</p>
<p>Liege ich da falsch?</p>
<p>Wird bei <em>return tmp</em> immer eine Kopieraktion durchgeführt oder verhindern das gute compiler, wenn man den return Wert anschließend zuweist und dieser auf eine lokale Variable verwies?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192338/rückgabewert-optimale-lsg-gesucht</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 10:01:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192338.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Sep 2007 08:24:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 08:24:07 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct X{
vector&lt;XYZ&gt; getVector()
{
   vector&lt;XYZ&gt; tmp; 
   ... *fill vector with objects*
   return tmp;
};

int main()
{
   X a;

   vector&lt;XYZ&gt;&amp; vec1 = a.getVector();  //A
   vector&lt;XYZ&gt;  vec2 = a.getVector();  //B
   vec2 = a.getVector();               //C
}
</code></pre>
<p><strong>Frage</strong>: Welche Variante ist Laufzeitechnisch und v.a. speichertechnisch unter der Anahme von laaaaangen, speicherintensiven vektoren zu bevorzugen?</p>
<p>Wie oft wird bei <strong>A</strong>, <strong>B</strong> und <strong>C</strong> kopiert ?</p>
<p>Ich gehe derzeit von folgenden worst case Szenarien aus (also ohne compiler-optimierungen):<br />
<strong>A</strong> 1 Kopie bei <em>return tmp</em><br />
<strong>B</strong> 1 Kopie bei <em>return tmp</em>, 1 Kopie durch aufruf des copy-konstruktos von vector<br />
<strong>C</strong> 1 Kopie bei <em>return tmp</em>, 1 Kopie durch aufruf des zuweisungs-operator von vector</p>
<p>Liege ich da falsch?</p>
<p>Wird bei <em>return tmp</em> immer eine Kopieraktion durchgeführt oder verhindern das gute compiler, wenn man den return Wert anschließend zuweist und dieser auf eine lokale Variable verwies?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364461</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 13 Sep 2007 08:24:07 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 08:28:55 GMT]]></title><description><![CDATA[<p>Da bei deiner getVector Funktion der Vector gefüllt wird, würde ich sowas vorschlagen.</p>
<pre><code class="language-cpp">int mina(){
    X a;
    vector&lt;XYZ&gt; v;
    a.fill(&amp;v); //Oder als referenz
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1364466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364466</guid><dc:creator><![CDATA[lalallalala]]></dc:creator><pubDate>Thu, 13 Sep 2007 08:28:55 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 08:32:34 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Version A ist nicht gültig. Du gibst von der Methode die temporäre(!) Kopie eines lokalen Objekts zurück und willst nur eine Referenz darauf weiternehmen. Wenn das der Compiler zuläßt kommt es zu undefiniertem Verhalten.<br />
Version B ist potentiell das beste, weil dort das Rückgabeergebnis gleich zum Initialisieren des vectors verwendet wird.<br />
Bei Version C muß erstens das alte in vec2 gelöscht, dann alles kopiert werden.</p>
<p>bis bakd<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364470</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 13 Sep 2007 08:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 08:50:18 GMT]]></title><description><![CDATA[<p>lalallalala schrieb:</p>
<blockquote>
<p>Da bei deiner getVector Funktion der Vector gefüllt wird, würde ich sowas vorschlagen.</p>
<pre><code class="language-cpp">int mina(){
    X a;
    vector&lt;XYZ&gt; v;
    a.fill(&amp;v); //Oder als referenz
}
</code></pre>
</blockquote>
<p>so, mache ich das i.d.R. auch. Aber hin und wieder ist diese Funktionaliät nicht gegeben. Mich interesiiert grad das allgmeine Verhalten. Zumal ich auch gelesenhabe, dass manche Compiler automatisch das von dir gewünschte zur Compilezeit umsetzen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7971">@akari</a>:<br />
version a verwende ich wenn dann auschließlich temporär in einem scope. niemals länger.<br />
z.B.</p>
<pre><code class="language-cpp">void writeGeoFiles(X a)
{
   vector&lt;XYZ&gt;&amp; v = a.getVector();   
   ...
   for_each(...) file.write(...);
   ...
}
</code></pre>
<p>bisher verwende ich ausschließlich Version A für solche fälle und hatte damit noch keine probleme (weder mit cl, gcc3.x, 4.x oder intel compiler).<br />
ist es bei dem genannten bsp auch undefiniert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364483</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 13 Sep 2007 08:50:18 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 08:54:56 GMT]]></title><description><![CDATA[<p>Wenn du es wirklich mti so speicherintensiven vectoren zu tun hast denke ich auch, dass die Variante von lalla besser ist - lass deinem struct von aussen einen Vector uebergeben, den du nur fuellst. Im schlimmsten Fall musst du dann vor Aufruf der Methode einen neuen vector erzeugen, der per Referenz an die Methode uebergeben und gefuellt wird (also nicht kopiert). Wenn du glueck hast hast du schon einen vector, den du einfach mit clear() bereinigst und dann fuellst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364486</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 13 Sep 2007 08:54:56 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:02:46 GMT]]></title><description><![CDATA[<p>nochmal: wir ist klar, dass die übergabe mit ner referenz besser ist. aber hier geht es darum, dass mit diese option nicht zur verfügung steht. die struvt ist nur eine dummy-klasse und soll nur die problemstellung veranschaulichen.<br />
ich habe leider nicht ide wahl, ich <strong>muss</strong> A, B oder C verwenden.</p>
<p>gekärt werden müsste jetzt die frage mit ob <strong>A</strong> auch in dem von mir genannten weiten Bsp undefniert ist und vor allem würden mich die kopieroperationen interessieren (siehe topic)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364489</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:02:46 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:03:10 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Also mein GCC meckert zu Recht wie ich erwartet habe</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; Test()
{
  return std::vector&lt;int&gt;();
}
...
std::vector&lt;int&gt;&amp; test = Test();
test.push_back(10);
</code></pre>
<blockquote>
<p>invalid initialization of non-const reference of type ... from a temporary of a type ...</p>
</blockquote>
<p>Interessant ist das mit einer const Referenz kompiliert wird. Meines Erachtens sollte aber dann bei jedem Lesen von test auf ungültiger Speicher zugriffen werden.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364494</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:03:10 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:04:13 GMT]]></title><description><![CDATA[<p>Wenn eine Funktion ein Objekt zurückgibt, existiert dieses nur sehr sehr kurz und zwar nicht weiter, als bis die Zeile abgearbeitet ist (vereinfacht gesprochen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    />. Wenn du eine Referenz auf dieses Objekt setzt, zeigt die Referenz in irgendeinen Bereich, wo das Objekt gar nicht mehr ist (es wird ja kurz nach dem Funktionsaufruf kaputtgemacht).<br />
Und Referenzen, die auf irgendwas ungültiges zeigen, sind scheiße, mit Verlaub <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/1364497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364497</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:04:13 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:04:51 GMT]]></title><description><![CDATA[<p>muffmolch schrieb:</p>
<blockquote>
<p>gekärt werden müsste jetzt die frage mit ob <strong>A</strong> auch in dem von mir genannten weiten Bsp undefniert ist...</p>
</blockquote>
<p>Grundsätzlich sehe ich keinen Grund warum dein Fall A jemals definiert sein sollte. Temporäre Ergebnise sind nach dem zuweisen undefiniert. Vermeide Kopien wo es möglich ist, aber unterbinde sie niemals wo es nötig ist.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364498</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:04:51 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:11:50 GMT]]></title><description><![CDATA[<p>Warum dir die Option nicht zur Verfuegung stehen sollte sei mal dahingestellt (ich kann mir kein Szenario vorstellen das sowas verbietet).<br />
Warum version A undefiniert ist, nehme ich mal kurz auseinander:</p>
<p>- Du definierst in getvector() einen vector tmp, der eigentlich nur genau innerhalb dieser Methode existiert.<br />
- durch das return statement existiert tmp noch einen kleinen Tick laenger, naemlich um den Ergebniswert ggf einer anderen Variablen zuweisen zu koennen, wird danach aber doch zerstoert. (im Grunde wird eine temporaere Variable ohne Namen angelegt, die den inhalt von tmp kopiert. das wird aber meist wegoptimiert)<br />
- durch die Zuweisung an eine Referenz (v) verweist diese Referenz auf tmp bzw. auf die temporaere Variable, die sofort nach der Zuweisung zerstoert wird. v ist also von Anfang an eine Referenz auf ein nichtmehr existierendes Objekt -&gt; undefiniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364503</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:11:50 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:14:29 GMT]]></title><description><![CDATA[<p>Du kannst deinen vector in getVector mit new erstellen und dann den Pointer zurück geben und wieder löschen, wenn du ihn nicht mehr brauchst. es gibt auch noch diese auto_ptr, oder wie die heißen, die das wohl automatisch machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364507</guid><dc:creator><![CDATA[lalallalala]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:14:29 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:16:09 GMT]]></title><description><![CDATA[<p>okay. das hilt mir schon mal enorm weiter... dann werde ich hier version B verwenden.<br />
nur zur sicherheit. A ist aber erlaubt bzw. sogar pflicht (wenn nachhaltig memberdaten auf dieseunschöne weise ändern möchte) bei:</p>
<pre><code class="language-cpp">struct X1{
vector&lt;XYZ&gt;&amp; getVector() { return m_a; } 
vector&lt;XYZ&gt; m_a;
};

int main() { X1 a; vector&lt;XYZ&gt;&amp; vec = a.getVector(); }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1364508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364508</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:16:09 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:17:14 GMT]]></title><description><![CDATA[<p>lalallalala schrieb:</p>
<blockquote>
<p>Du kannst deinen vector in getVector mit new erstellen und dann den Pointer zurück geben und wieder löschen, wenn du ihn nicht mehr brauchst. es gibt auch noch diese auto_ptr, oder wie die heißen, die das wohl automatisch machen.</p>
</blockquote>
<p>stimmt... die auto_ptr idee ist gut. andernfalls generiert man sich leicht nen speicherloch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364510</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:17:14 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:18:01 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Warum dir die Option nicht zur Verfuegung stehen sollte sei mal dahingestellt (ich kann mir kein Szenario vorstellen das sowas verbietet).<br />
Warum version A undefiniert ist, nehme ich mal kurz auseinander:</p>
<p>- Du definierst in getvector() einen vector tmp, der eigentlich nur genau innerhalb dieser Methode existiert.<br />
- durch das return statement existiert tmp noch einen kleinen Tick laenger, naemlich um den Ergebniswert ggf einer anderen Variablen zuweisen zu koennen, wird danach aber doch zerstoert. (im Grunde wird eine temporaere Variable ohne Namen angelegt, die den inhalt von tmp kopiert. das wird aber meist wegoptimiert)<br />
- durch die Zuweisung an eine Referenz (v) verweist diese Referenz auf tmp bzw. auf die temporaere Variable, die sofort nach der Zuweisung zerstoert wird. v ist also von Anfang an eine Referenz auf ein nichtmehr existierendes Objekt -&gt; undefiniert.</p>
</blockquote>
<p>danke für die erklärung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364511</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:18:01 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:22:40 GMT]]></title><description><![CDATA[<p>Schon gut, ich tippe einfach verdammt langsam <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364514</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:23:10 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>muffmolch schrieb:</p>
<blockquote>
<p>okay. das hilt mir schon mal enorm weiter... dann werde ich hier version B verwenden.<br />
nur zur sicherheit. A ist aber erlaubt bzw. sogar pflicht (wenn nachhaltig memberdaten auf dieseunschöne weise ändern möchte) bei:</p>
<pre><code class="language-cpp">struct X1{
vector&lt;XYZ&gt;&amp; getVector() { return m_a; } 
vector&lt;XYZ&gt; m_a;
};

int main() { X1 a; vector&lt;XYZ&gt;&amp; vec = a.getVector(); }
</code></pre>
</blockquote>
<p>Ja das ist in Ordnung und sinnvoll. Aber eben auch ein großer Unterschied, da hier eine Referenz auf eine Membervariable zurückgegeben wird und nicht eine temporäre Kopie einer lokalen Variable.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364516</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:23:10 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:28:46 GMT]]></title><description><![CDATA[<p>@akiri<br />
ist klar. ich hatte gehofft, dass eben die temporären im falle eines aliases soage bestehen bleiben, bis dieser den scope verläßt. aber das ist nun geklärt <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="😉"
    /><br />
ansonsten verwende ich aliase immer um v.a. den code übersichtlich zu machen.<br />
daher eine frage am rande</p>
<pre><code class="language-cpp">vector&lt; vector&lt;int&gt; &gt; vec;
...
vector&lt;int&gt;&amp; internal_vec = vec[2];
internal_vec[3] = 4;  //1
vec[2][4] =5;         //2
</code></pre>
<p>1 und 2 führen beide eine zuweisung durch. ist 1 auch durch den direkten zugriff schneller als 2, denn dort muss er zuerst ja wieder vec[2] aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364520</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:28:46 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:31:31 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Naja bei einem einzigen Effektiven Zugriff hast du natürlich keinen Vorteil davon.<br />
Wenn du aber mehrmals hintereinander auf den gleichen internal_vec zugreifen willst dann ist das sehr wohl effizienter.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364524</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:31:31 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 09:39:39 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Hallo<br />
Naja bei einem einzigen Effektiven Zugriff hast du natürlich keinen Vorteil davon.<br />
Wenn du aber mehrmals hintereinander auf den gleichen internal_vec zugreifen willst dann ist das sehr wohl effizienter.<br />
bis bald<br />
akari</p>
</blockquote>
<p>selbstredend. sondern eben bei schleifen wie:</p>
<pre><code class="language-cpp">vector&lt; vector&lt;int&gt; &gt; vec;
...
for(int i=(int)vec.size()-1; i&gt;=0; ++i){
   vector&lt;int&gt;&amp; internal_vec[i];  
   for(int j=(int)vec[i].size()-1; i&gt;=0; ++j) internal_vec[j] = i*j;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1364530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364530</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:39:39 GMT</pubDate></item><item><title><![CDATA[Reply to [rückgabewert] optimale lsg gesucht on Thu, 13 Sep 2007 10:07:11 GMT]]></title><description><![CDATA[<p>muffmolch schrieb:</p>
<blockquote>
<p><strong>Frage</strong>: Welche Variante ist Laufzeitechnisch und v.a. speichertechnisch unter der Anahme von laaaaangen, speicherintensiven vektoren zu bevorzugen?</p>
</blockquote>
<p>Variante <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f628.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--fearful_face"
      title="D:"
      alt="😨"
    /></p>
<pre><code class="language-cpp">vector&lt;XYZ&gt;  vec;
X a;
a.getVector().swap(vec);
</code></pre>
<p>Dass das meist nicht gemacht wird, bedarf keiner Erklärung. In gewisser Weise ist das eine Art manuelles move - mit C++0x wird das unnötig werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364543</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 13 Sep 2007 10:07:11 GMT</pubDate></item></channel></rss>