<?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[Vektor mit Pointern kopieren]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ich einen Vektor mit Pointern kopieren will (sagen wir mal der enthält immer so 200-600 Elemente), lohnt es sich dann &quot;reserve&quot; beim Zielvektor aufzurufen?</p>
<p>Beispiel:</p>
<p>Zielvektor enthält 201 Pointer. In einem anderen Vektor sind 403 Elemente.<br />
Jetzt mache ich folgendes:</p>
<pre><code class="language-cpp">std::vector&lt;X*&gt;::iterator itB = m_A.begin();
std::vector&lt;X*&gt;::iterator itE = m_A.end();

m_B.reserve( m_B.size() + m_A.size() ); // Hier

while(itB != itE)
{
   m_B.push_back( new X( *(*itB) ) );  
   ++itB;
}
</code></pre>
<p>Bringt das Geschwindigkeitsvorteile?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/250446/vektor-mit-pointern-kopieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 01:31:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/250446.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Sep 2009 08:02:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vektor mit Pointern kopieren on Fri, 18 Sep 2009 08:02:24 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ich einen Vektor mit Pointern kopieren will (sagen wir mal der enthält immer so 200-600 Elemente), lohnt es sich dann &quot;reserve&quot; beim Zielvektor aufzurufen?</p>
<p>Beispiel:</p>
<p>Zielvektor enthält 201 Pointer. In einem anderen Vektor sind 403 Elemente.<br />
Jetzt mache ich folgendes:</p>
<pre><code class="language-cpp">std::vector&lt;X*&gt;::iterator itB = m_A.begin();
std::vector&lt;X*&gt;::iterator itE = m_A.end();

m_B.reserve( m_B.size() + m_A.size() ); // Hier

while(itB != itE)
{
   m_B.push_back( new X( *(*itB) ) );  
   ++itB;
}
</code></pre>
<p>Bringt das Geschwindigkeitsvorteile?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1780832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780832</guid><dc:creator><![CDATA[CLIC]]></dc:creator><pubDate>Fri, 18 Sep 2009 08:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor mit Pointern kopieren on Fri, 18 Sep 2009 08:27:27 GMT]]></title><description><![CDATA[<p>Kannst du doch ganz einfach messen. Ich hab derartige Messungen zwar noch nie gemacht ( nicht im Bezug auf reserve ) aber ich denke, es macht kaum einen Unterschied, da es sich nur um Pointer handelt und deine Datenmenge auch nicht besonders groß ist.<br />
Würdest du 1 Mio Pointer halten wollen, wäre das vielleicht was anderes.</p>
<p>Sind aber nur Vermutungen. Eine Messung wird dir da eher weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1780842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780842</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 18 Sep 2009 08:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor mit Pointern kopieren on Fri, 18 Sep 2009 08:40:40 GMT]]></title><description><![CDATA[<p>CLIC schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::vector&lt;X*&gt;::iterator itB = m_A.begin();
std::vector&lt;X*&gt;::iterator itE = m_A.end();
m_B.reserve( m_B.size() + m_A.size() ); // Hier
while(itB != itE)
{
   m_B.push_back( new X( *(*itB) ) );  
   ++itB;
}
</code></pre>
</blockquote>
<p>Bevorzuge Elementfunktionen des Containers, die das tun, was Du willst:</p>
<pre><code class="language-cpp">m_B.insert(m_B.end(), itB,irE);
</code></pre>
<p>Eine gute Implementierung von vector&lt;&gt;::insert berechnet die Länge der Sequenz [itB,itE) und reserviert genügend Speicher, falls die Iteratoren itB und itE RandomAccessIteratoren sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1780848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780848</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 18 Sep 2009 08:40:40 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor mit Pointern kopieren on Fri, 18 Sep 2009 09:02:14 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Bevorzuge Elementfunktionen des Containers, die das tun, was Du willst:</p>
<pre><code class="language-cpp">m_B.insert(m_B.end(), itB,irE);
</code></pre>
<p>Eine gute Implementierung von vector&lt;&gt;::insert berechnet die Länge der Sequenz [itB,itE) und reserviert genügend Speicher, falls die Iteratoren itB und itE RandomAccessIteratoren sind.</p>
</blockquote>
<p>Aber so werden ja nur die Pointer kopiert und nicht die Objekte, richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1780858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780858</guid><dc:creator><![CDATA[CLIC]]></dc:creator><pubDate>Fri, 18 Sep 2009 09:02:14 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor mit Pointern kopieren on Fri, 18 Sep 2009 09:05:22 GMT]]></title><description><![CDATA[<p>CLIC schrieb:</p>
<blockquote>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Bevorzuge Elementfunktionen des Containers, die das tun, was Du willst:</p>
<pre><code class="language-cpp">m_B.insert(m_B.end(), itB,irE);
</code></pre>
<p>Eine gute Implementierung von vector&lt;&gt;::insert berechnet die Länge der Sequenz [itB,itE) und reserviert genügend Speicher, falls die Iteratoren itB und itE RandomAccessIteratoren sind.</p>
</blockquote>
<p>Aber so werden ja nur die Pointer kopiert und nicht die Objekte, richtig?</p>
</blockquote>
<p>Ja. Hast du etwas anderes vor? Das ging aus deinen anderen Beiträgen nicht hervor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1780860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780860</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 18 Sep 2009 09:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor mit Pointern kopieren on Fri, 18 Sep 2009 09:11:55 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>CLIC schrieb:</p>
<blockquote>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Bevorzuge Elementfunktionen des Containers, die das tun, was Du willst:</p>
<pre><code class="language-cpp">m_B.insert(m_B.end(), itB,irE);
</code></pre>
<p>Eine gute Implementierung von vector&lt;&gt;::insert berechnet die Länge der Sequenz [itB,itE) und reserviert genügend Speicher, falls die Iteratoren itB und itE RandomAccessIteratoren sind.</p>
</blockquote>
<p>Aber so werden ja nur die Pointer kopiert und nicht die Objekte, richtig?</p>
</blockquote>
<p>Ja. Hast du etwas anderes vor? Das ging aus deinen anderen Beiträgen nicht hervor.</p>
</blockquote>
<p>Wieso ging das aus</p>
<pre><code class="language-cpp">m_B.push_back( new X( *(*itB) ) );
</code></pre>
<p>Nicht hervor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1780864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780864</guid><dc:creator><![CDATA[CLIC]]></dc:creator><pubDate>Fri, 18 Sep 2009 09:11:55 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor mit Pointern kopieren on Fri, 18 Sep 2009 09:12:40 GMT]]></title><description><![CDATA[<p>Ja ok, nach zweimaligen lesen wohl unklar, geb ich zu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1780865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780865</guid><dc:creator><![CDATA[CLIC]]></dc:creator><pubDate>Fri, 18 Sep 2009 09:12:40 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor mit Pointern kopieren on Fri, 18 Sep 2009 09:24:47 GMT]]></title><description><![CDATA[<p>Ok, dann gibt es natürlich auch dafür Lösungen (zum Beispiel das was du schon gmeacht hast). Jedoch: Warum hast du einen Vector mit Zeigern auf Elemente die alle vom gleichen Typ sind? Warum speicherst du sie nicht gleich im Vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1780871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780871</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 18 Sep 2009 09:24:47 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor mit Pointern kopieren on Fri, 18 Sep 2009 12:28:03 GMT]]></title><description><![CDATA[<p>CLIC schrieb:</p>
<blockquote>
<p>Aber so werden ja nur die Pointer kopiert und nicht die Objekte, richtig?</p>
</blockquote>
<p>Richtig. Ich hatte nicht genau hingeguckt, was Du mit den Zeigern anstellst. Sorry!</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Warum hast du einen Vector mit Zeigern auf Elemente die alle vom gleichen Typ sind? Warum speicherst du sie nicht gleich im Vector?</p>
</blockquote>
<p>@CLIC: Das ist eine gute Frage von SeppJ. Es sieht nicht so aus, als ob Du die Zeiger an dieser Stelle wirklich brauchst. Sie machen nur die Verwaltung der Lebenszeit der Objekte kompliziert. Du hast das dann auch nicht richtig gekapselt. Nimm std::vector ohne Zeiger oder boost::ptr_vector. <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>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1780977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1780977</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 18 Sep 2009 12:28:03 GMT</pubDate></item></channel></rss>