<?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[Vektorelemente als Pointer...]]></title><description><![CDATA[<p>Hallo,</p>
<p>in meiner Klasse habe ich einen std::vector mit einer Anzahl von Elementen als Member (~500).<br />
Wie trefft ihr eure Entscheidung, ob ihr die Elemente im Vector als Pointer speichert, also std::vector&lt;Element*&gt; oder direkt std::vector&lt;Element&gt;?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/274164/vektorelemente-als-pointer</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 19:04:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/274164.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Sep 2010 07:09:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vektorelemente als Pointer... on Tue, 21 Sep 2010 07:09:46 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>in meiner Klasse habe ich einen std::vector mit einer Anzahl von Elementen als Member (~500).<br />
Wie trefft ihr eure Entscheidung, ob ihr die Elemente im Vector als Pointer speichert, also std::vector&lt;Element*&gt; oder direkt std::vector&lt;Element&gt;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1955128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1955128</guid><dc:creator><![CDATA[S3raph]]></dc:creator><pubDate>Tue, 21 Sep 2010 07:09:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vektorelemente als Pointer... on Tue, 21 Sep 2010 07:37:19 GMT]]></title><description><![CDATA[<p>vector&lt;T*&gt; Vorteil: Wenn sich der Vektor verändert in der Größe, bleiben die Zeiger immer noch gültig.<br />
vector&lt;T*&gt; Nachteil: Man muss sich selbst um das Löschen der Objekte, auf die die Zeiger zeigen, kümmern.<br />
vector&lt;T*&gt; Nachteil: Die Objekte liegen nicht notwendigerweise hintereinander im Speicher.<br />
vector&lt;T&gt; Nachteil: Wenn sich der Vektor verändert in der Größe, werden ggf Daten umkopiert, verschoben, etc. Die Adressen der Objekte ändern sich.<br />
vector&lt;T&gt; Vorteil: Man muss sich nicht selbst um das Löschen der Objekte kümmern.<br />
vector&lt;T&gt; Vorteil: Die Objekte liegen linear hintereinander im Speicher.</p>
<p>Einen vector aus Zeigern benutze ich <em>höchst selten</em>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1955136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1955136</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 21 Sep 2010 07:37:19 GMT</pubDate></item><item><title><![CDATA[Reply to Vektorelemente als Pointer... on Tue, 21 Sep 2010 07:57:01 GMT]]></title><description><![CDATA[<blockquote>
<p>also std::vector&lt;Element*&gt;</p>
</blockquote>
<p>Wenn schon, dann ptr_vector&lt;Element&gt;. Ansonsten siehe oben, womit aber Punkt 2 wegfällt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1955147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1955147</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Tue, 21 Sep 2010 07:57:01 GMT</pubDate></item><item><title><![CDATA[Reply to Vektorelemente als Pointer... on Tue, 21 Sep 2010 08:01:14 GMT]]></title><description><![CDATA[<p>kruemelkacker hat ja schon alles gesagt (und wie gesagt, ptr_vector&lt;foo&gt; ist die bessere Wahl fuer vector&lt;foo*&gt;).</p>
<p>Du musst nur noch entscheiden was fuer dich guenstiger ist.</p>
<p>* Wenns nicht performancekritisch ist, nimm vector&lt;&gt; und gut ist<br />
* Wenn du oft einfuegst (und nicht nur z. B. hautsaechlich 1x am Anfang) so dass das umkopieren ein problem wird, nimm ptr_vector&lt;&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1955149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1955149</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Tue, 21 Sep 2010 08:01:14 GMT</pubDate></item><item><title><![CDATA[Reply to Vektorelemente als Pointer... on Tue, 21 Sep 2010 08:29:50 GMT]]></title><description><![CDATA[<p>Wenn du große Elemente benutzt, kann es sehr viel länger dauern Operationen wie push_back (wenn er keine Reserven mehr hat und ein realloc ausführen muss, was offt alles kopiert), swap und besonders insert und erase auszuführen.<br />
Dann würden sich Pointer anbieten, da sie auf den meisten Systemen nur 4 oder 8 Byte verbrauchen.</p>
<p>Bei Zugriffen auf die Elemente musst du dann jedoch immer über die Pointer gehen, was etwas langsamer ist.</p>
<p>Viele kleine Elemente -&gt; keine pointer benutzen<br />
Wenige aber große Elemente -&gt; pointer benutzen</p>
<p>Aber wie krümelkacker auch durchsickern lässt, lohnt der extraaufwand meist nicht. Also Pointer nur benutzen wenn es um Performanceverbesserungen geht. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1955177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1955177</guid><dc:creator><![CDATA[Osbios]]></dc:creator><pubDate>Tue, 21 Sep 2010 08:29:50 GMT</pubDate></item><item><title><![CDATA[Reply to Vektorelemente als Pointer... on Tue, 21 Sep 2010 08:31:11 GMT]]></title><description><![CDATA[<p>Wenn ich das nach kurzem googeln richtig sehe ist ptr_vector nicht in der std enthalten sondern seperat z.B. über boost zu benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1955179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1955179</guid><dc:creator><![CDATA[Osbios]]></dc:creator><pubDate>Tue, 21 Sep 2010 08:31:11 GMT</pubDate></item><item><title><![CDATA[Reply to Vektorelemente als Pointer... on Tue, 21 Sep 2010 11:35:08 GMT]]></title><description><![CDATA[<p>Ja, die ptr_*-Klassen sind boost.</p>
<p>Und &quot;Nachteil&quot; an vector&lt;T&gt; ist ja auch einfach, dass T copyable sein muss, andernfalls müssen wir also zwangsläufig ptr_vector oder vector&lt;T*&gt; benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1955314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1955314</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 21 Sep 2010 11:35:08 GMT</pubDate></item><item><title><![CDATA[Reply to Vektorelemente als Pointer... on Tue, 21 Sep 2010 12:17:11 GMT]]></title><description><![CDATA[<p>Bei vector auch immer schaun obs wirklich unbedingt ein vector sein muss oder obs nicht auch eine list (oder ähnliches) tut. Das erspart dann einige der Performanceprobleme die vector beim einfügen von neuen Objekten hat (zu Lasten einer schlechteren Zugriffszeit auf Element n des containers)..siehe Punkt 4 auf krümelkackers Liste.</p>
<p>Wenns also nur ums durchiterieren geht und um insert/remove von Elementen (was bei 500 Elementen wahrscheinlich ist), dann nimm was anderes als vector.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1955330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1955330</guid><dc:creator><![CDATA[antialias]]></dc:creator><pubDate>Tue, 21 Sep 2010 12:17:11 GMT</pubDate></item><item><title><![CDATA[Reply to Vektorelemente als Pointer... on Tue, 21 Sep 2010 15:05:35 GMT]]></title><description><![CDATA[<p>Denn größten Nutzen von Vector sehe ich darin, dass die Daten immer wie ein array angeordnet sind und man diese daher direkt mit Funktionen benutzen kann die arrays erwarten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1955444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1955444</guid><dc:creator><![CDATA[Osbios]]></dc:creator><pubDate>Tue, 21 Sep 2010 15:05:35 GMT</pubDate></item><item><title><![CDATA[Reply to Vektorelemente als Pointer... on Tue, 21 Sep 2010 15:43:34 GMT]]></title><description><![CDATA[<p>Fragt sich dann nur, warum du Funktionen hast, die Arrays erwarten und keinen Vektor bzw. ein einfaches Iteratorpaar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1955460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1955460</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Tue, 21 Sep 2010 15:43:34 GMT</pubDate></item><item><title><![CDATA[Reply to Vektorelemente als Pointer... on Tue, 21 Sep 2010 17:51:40 GMT]]></title><description><![CDATA[<p>antialias schrieb:</p>
<blockquote>
<p>Wenns also nur ums durchiterieren geht und um insert/remove von Elementen (was bei 500 Elementen wahrscheinlich ist), dann nimm was anderes als vector.</p>
</blockquote>
<p>Nein, kehre nicht zu schnell von <code>std::vector</code> ab. Dieser bleibt nämlich für die meisten Fälle der am besten geeignete Container. Ohne Beachtung der Reihenfolge kann er auch in O(1) löschen und einfügen. Wenn die Grössenordnung der Elemente zuvor bekannt ist, kann man mit <code>reserve()</code> nachhelfen.</p>
<p><code>std::list</code> hat einige Nachteile (eine Auswahl der von mir aus gesehen wichtigen Punkte):</p>
<ul>
<li>Overhead einer dynamischen Allokation und Deallokation pro Element statt pro Container. Das benötigt zusätzliche Zeit und Speicher.</li>
<li>Schlechte Cache-Lokalität, was sich beim Durchiterieren negativ auswirken kann.</li>
<li>Kein Random-Access, folglich auch keine darauf basierenden Algorithmen</li>
</ul>
<p>Hingegen schneidet <code>std::list</code> vor allem in folgenden Punkten besser ab als <code>std::vector</code> :</p>
<ul>
<li>Einfügungen und Löschungen dauern immer gleich lang, zudem kann mit O(1) die Reihenfolge behalten werden</li>
<li>Sämtliche Iteratoren, Referenzen und Zeiger auf Elemente bleiben gültig, solange das Element existiert</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/1955531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1955531</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 21 Sep 2010 17:51:40 GMT</pubDate></item><item><title><![CDATA[Reply to Vektorelemente als Pointer... on Tue, 21 Sep 2010 18:10:34 GMT]]></title><description><![CDATA[<p>Athar schrieb:</p>
<blockquote>
<p>Fragt sich dann nur, warum du Funktionen hast, die Arrays erwarten und keinen Vektor bzw. ein einfaches Iteratorpaar.</p>
</blockquote>
<p>Man muss das ja nicht mit eigenen Funktionen so handhaben, aber z.B. ältere Bibliotheken die keine Vector benutzen oder noch garnicht kannten, können damit gefüttert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1955545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1955545</guid><dc:creator><![CDATA[Osbios]]></dc:creator><pubDate>Tue, 21 Sep 2010 18:10:34 GMT</pubDate></item></channel></rss>