<?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[Was schnelleres als std::list ??]]></title><description><![CDATA[<p>Hi</p>
<p>20% meiner Zeit verbrat ich bei std::list.push_back().<br />
Bin mir nicht sicher, ob es nicht was schnelleres gäbe.<br />
Also das Objekt wird recht oft erzeugt, dann vier Einträge reingepusht, und anschliessend drüber iteriert mit remove_if() und einem Funktor Einträge entfernt, dann wird ausgelesen und die Liste wieder vernichtet.</p>
<p>Hoffe das versteht jemand :p</p>
<p>Danke schonmal für eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168961/was-schnelleres-als-std-list</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 16:19:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168961.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 30 Dec 2006 13:56:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Sat, 30 Dec 2006 13:56:14 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>20% meiner Zeit verbrat ich bei std::list.push_back().<br />
Bin mir nicht sicher, ob es nicht was schnelleres gäbe.<br />
Also das Objekt wird recht oft erzeugt, dann vier Einträge reingepusht, und anschliessend drüber iteriert mit remove_if() und einem Funktor Einträge entfernt, dann wird ausgelesen und die Liste wieder vernichtet.</p>
<p>Hoffe das versteht jemand :p</p>
<p>Danke schonmal für eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199861</guid><dc:creator><![CDATA[Opti]]></dc:creator><pubDate>Sat, 30 Dec 2006 13:56:14 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Sat, 30 Dec 2006 14:03:48 GMT]]></title><description><![CDATA[<p>(sry für doppelpost)</p>
<p>Hab schon mit vector probiert, saugt glatt 48% statt 20% <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199867</guid><dc:creator><![CDATA[Opti]]></dc:creator><pubDate>Sat, 30 Dec 2006 14:03:48 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Sat, 30 Dec 2006 14:19:05 GMT]]></title><description><![CDATA[<p>Naja, reservier doch vorher genug Elemente über reserve(). Wieviel Elemente gibst du denn hinten rein? Wenn du sagen wir mal 100.000 Elemente rein gibst, kannst du doch schon mal 100.000 reservieren.</p>
<p>Ansonst solltest du dir bewusst sein, das sowohl List als auch Vector bei push_back, iteration und bei remove_if jeweils vor und nachteile haben. Es gibt keine universellen Container, die alles am besten können. Du brauchst dummerweise von allem etwas.</p>
<p>Z.B. ist beim iterieren vector schneller als list. aber beim removen ist wieder list am schnellsten. Wenn es einen Container geben würde, der alles am besten kann, hätten wir nur diesen einen in der Standardlib. <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/1199878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199878</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 30 Dec 2006 14:19:05 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Sat, 30 Dec 2006 14:40:47 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Naja, reservier doch vorher genug Elemente über reserve(). Wieviel Elemente gibst du denn hinten rein?</p>
</blockquote>
<p>Normalerweise maximal vier am Anfang, und dann werden welche entfernt.</p>
<p>Artchi schrieb:</p>
<blockquote>
<p>Z.B. ist beim iterieren vector schneller als list. aber beim removen ist wieder list am schnellsten. Wenn es einen Container geben würde, der alles am besten kann, hätten wir nur diesen einen in der Standardlib. <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>
</blockquote>
<p>Ja habs gemerkt, beim remove_if geht 40% der Zeit drauf. Wie findich jetzt ne idealere Lösung? Wär ev. ein simples Array schneller? Es sind immer nur maximal vier Einträge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199891</guid><dc:creator><![CDATA[Opti]]></dc:creator><pubDate>Sat, 30 Dec 2006 14:40:47 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Sat, 30 Dec 2006 16:08:00 GMT]]></title><description><![CDATA[<p>Probiere C-array, vector, deque und list aus. Es hängt auch davon ab, welches Objekt man in den Container &quot;pusht&quot;, &quot;removet&quot; usw.<br />
Vorgehensweise siehe z.B.:<br />
<a href="http://www.henkessoft.de/C++/C++%20Fortgeschrittene/C++_Fortgeschrittene.htm#2.8._Die_Klasse_Stack_als_Wrapper_f%FCr" rel="nofollow">http://www.henkessoft.de/C++/C++ Fortgeschrittene/C++_Fortgeschrittene.htm#2.8._Die_Klasse_Stack_als_Wrapper_f�r</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199949</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Sat, 30 Dec 2006 16:08:00 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Sat, 30 Dec 2006 16:15:46 GMT]]></title><description><![CDATA[<p>Je nachdem wie du es implementierst, müsste ein fixes Array aus 4 Elementen defintiv schneller sein. Sind die Objekte Grundelemente wie int, double oder so, oder class- bzw. struct-Objekte, die einen Konstruktor brauchen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199953</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 30 Dec 2006 16:15:46 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Sat, 30 Dec 2006 16:39:12 GMT]]></title><description><![CDATA[<p>Bist du sicher das es nicht an fir selbst liegt.</p>
<p>- Legst du Pointer oder Objekte in der Liste ab.<br />
<strong>Wenn</strong> du Objekte ablegst dann wird natürlich der Copy-Constructor<br />
bei jedem push_back() aufgerufen. Ist dieser call teuer, sind Pointer<br />
nicht vielleicht besser ?</p>
<p>- Beim remove_if() wird natürlich auch dein Funktor aufgerufen.<br />
Kostet diese Funktion vielleicht viel Zeit, oder die Destruktion der<br />
&quot;gefundenen&quot; Objekte.</p>
<p>Du solltest den Engpass näher identifizieren. Ich kann mir, <strong>so leicht</strong>,<br />
keine Situation vorstellen in der eine Umstellung von vector auf array die<br />
Lösung der Performance-Probleme bringt. Vielleicht solltest du ehr den<br />
Algorithmus deines Programms als Ganzes nochmal überdenken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199966</guid><dc:creator><![CDATA[Redhead]]></dc:creator><pubDate>Sat, 30 Dec 2006 16:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Sat, 30 Dec 2006 16:56:18 GMT]]></title><description><![CDATA[<p>Schneller ist nur mein Auto und ein Array</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199974</guid><dc:creator><![CDATA[MichaelSch]]></dc:creator><pubDate>Sat, 30 Dec 2006 16:56:18 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Sat, 30 Dec 2006 17:14:45 GMT]]></title><description><![CDATA[<p>@Erhard Henkes<br />
danke für den Link! sieht seeehr interessant aus...</p>
<p>@Opti<br />
Versuch doch mal eine Liste oder ein Vector selbst zu programmieren <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="😉"
    /> Ist eigentlich sehr einfach (wenn man weiß wie). Da weiß man dann aber auch alles - was so am Code nebenbei &quot;verbraten&quot; werden muß... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Habe schon versuch selber sowas zu machen... Erst dabei lerne ich aber was die Sprache an sich eigentlich ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199980</guid><dc:creator><![CDATA[Winnie01]]></dc:creator><pubDate>Sat, 30 Dec 2006 17:14:45 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Sat, 30 Dec 2006 17:32:24 GMT]]></title><description><![CDATA[<p>Erhard Henkes schrieb:</p>
<blockquote>
<p>Probiere C-array, vector, deque und list aus. Es hängt auch davon ab, welches Objekt man in den Container &quot;pusht&quot;, &quot;removet&quot; usw.<br />
Vorgehensweise siehe z.B.:<br />
<a href="http://www.henkessoft.de/C++/C++%20Fortgeschrittene/C++_Fortgeschrittene.htm#2.8._Die_Klasse_Stack_als_Wrapper_f%FCr" rel="nofollow">http://www.henkessoft.de/C++/C++ Fortgeschrittene/C++_Fortgeschrittene.htm#2.8._Die_Klasse_Stack_als_Wrapper_f�r</a></p>
</blockquote>
<p>WOW! Na wenn das nicht ein genialer Tutorial für C++ ist ;). Sowas habe ich noch nie zu lesen bekommen.</p>
<p>Sehr gut Dr. Henkes!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199990</guid><dc:creator><![CDATA[Winnie01]]></dc:creator><pubDate>Sat, 30 Dec 2006 17:32:24 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Sun, 31 Dec 2006 10:08:56 GMT]]></title><description><![CDATA[<p>Thx.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200203</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Sun, 31 Dec 2006 10:08:56 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Sun, 31 Dec 2006 10:27:49 GMT]]></title><description><![CDATA[<p>Man kann einen Pool-Allokator verwenden. Das größte Problem bei kleinen Elementen in std::list ist das für jedes Element ein eigenes new aufgerufen wird. Die MFC geht hier effektiver mit um, denn hier werden die Elemente in größeren Speichblocks zusammengefasst (plex-Code).</p>
<p>Wenn man einen eigenen Allokator für die std::list verwendet, der einen eignen Pool nutzt, dann kann man bis zu 100% Performance gewinnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200215</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sun, 31 Dec 2006 10:27:49 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Mon, 01 Jan 2007 14:37:06 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Man kann einen Pool-Allokator verwenden. Das größte Problem bei kleinen Elementen in std::list ist das für jedes Element ein eigenes new aufgerufen wird. Die MFC geht hier effektiver mit um, denn hier werden die Elemente in größeren Speichblocks zusammengefasst (plex-Code).</p>
<p>Wenn man einen eigenen Allokator für die std::list verwendet, der einen eignen Pool nutzt, dann kann man bis zu 100% Performance gewinnen.</p>
</blockquote>
<p>Tönt spannend, wie geht sowas? Gibts da schon was fertiges?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200624</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Mon, 01 Jan 2007 14:37:06 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Mon, 01 Jan 2007 14:39:49 GMT]]></title><description><![CDATA[<blockquote>
<p>plex-Code</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200626</guid><dc:creator><![CDATA[:confused:]]></dc:creator><pubDate>Mon, 01 Jan 2007 14:39:49 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Mon, 01 Jan 2007 16:49:50 GMT]]></title><description><![CDATA[<blockquote>
<p>Tönt spannend, wie geht sowas? Gibts da schon was fertiges?</p>
</blockquote>
<p><a href="http://www.codeproject.com/vcpp/stl/blockallocator.asp" rel="nofollow">http://www.codeproject.com/vcpp/stl/blockallocator.asp</a></p>
<p>&quot;Bis zu 100% Performance&quot; ist aber etwas viel versprochen. Wo die Zeit wirklich bleibt, hängt von deinem Listenelement ab - siehe Redheads Antwort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200664</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Mon, 01 Jan 2007 16:49:50 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Mon, 01 Jan 2007 17:33:21 GMT]]></title><description><![CDATA[<p>Schlechterster Fall für new/delete ist z.B. eine Pointerliste. Wenn davon 1Mio Pointer allokiert ist solch ein Blockallokator wirklich um 100% schneller. Ganz besonders wenn es um das Zerstören der Liste geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200696</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 01 Jan 2007 17:33:21 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Mon, 01 Jan 2007 19:25:07 GMT]]></title><description><![CDATA[<p>Schlechtester Fall für den Pool Allocator: Durch die Überallokation des Pools muß der Speichermanager swappen und du bist 10x langsamer.</p>
<p>Ich will ja nur vermeiden, daß Du überzogene Hoffnungen weckst <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="😉"
    /> Für sehr viele primitive Elemente ist sogar weniger als die halbe Zeit drin. aber bei 4 Elementen unbekannten Typs würde ich nix versprechen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200777</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Mon, 01 Jan 2007 19:25:07 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Tue, 02 Jan 2007 09:01:49 GMT]]></title><description><![CDATA[<p>Ein Problem bei der Geschwindigkeit könnte remove_if() sein - da die Algorithmen nichts über die unterliegende Datenstruktur wissen, können sie die Vorteile der Liste auch nicht ausnutzen (remove_if() &quot;löscht&quot;, indem es alle nachfolgenden Elemente umkopiert - und je nach Größe kann das teuer werden). Da ist es vermutlich am besten, du gehst in einer Schleife über die Liste und löschst sie selber per erase().</p>
<p>Ansonsten: Für vier Elemente so eine aufwendige Verarbeitung? Ist es da nicht einfacher, von vornherein nur die Elemente in die Liste aufzunehmen, die deine Kriterien erfüllen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200956</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 02 Jan 2007 09:01:49 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Tue, 02 Jan 2007 09:38:22 GMT]]></title><description><![CDATA[<p>So erstmal frohes Neues<br />
und besten Dank für die vielen Antworten.<br />
Hab beim Googlen die Boost Pool Library gefunden, werd mir das mal anlesen.<br />
Wegem remove_if() und so, ich glaub langsam auch, dass ich es zu kompliziert mache...nur füllen was ich brauch tönt gut. Ev mach ich das lieber alles mit nem Array und mit Zeigern oder mit nem Buchstaben oder ner Zahl als Platzhalter, statt dem Objekt selbst.<br />
Es handelt sich übrigens um relativ kleine Klassen mit nur einem statischen Member und 2 - 3 Methoden, Daten gibts sonst keine.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200982</guid><dc:creator><![CDATA[Opti]]></dc:creator><pubDate>Tue, 02 Jan 2007 09:38:22 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Tue, 02 Jan 2007 09:53:23 GMT]]></title><description><![CDATA[<p>Opti schrieb:</p>
<blockquote>
<p>Daten gibts sonst keine.</p>
</blockquote>
<p>Und woran unterscheidest du dann deine Objekte ;)? Wenn sie keine eigenen Daten haben, sind sie doch faktisch identisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200991</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 02 Jan 2007 09:53:23 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Tue, 02 Jan 2007 10:34:26 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Opti schrieb:</p>
<blockquote>
<p>Daten gibts sonst keine.</p>
</blockquote>
<p>Und woran unterscheidest du dann deine Objekte ;)? Wenn sie keine eigenen Daten haben, sind sie doch faktisch identisch.</p>
</blockquote>
<p>Naja, am Typ..hehe..sind halt Repräsentanten und -onkels einer Art..man könnt auch einfach chars nehmen, aber der Autor des Buches wird sich schon was dabei gedacht haben..gell Marc++us <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/1201008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201008</guid><dc:creator><![CDATA[Opti]]></dc:creator><pubDate>Tue, 02 Jan 2007 10:34:26 GMT</pubDate></item><item><title><![CDATA[Reply to Was schnelleres als std::list ?? on Tue, 02 Jan 2007 13:10:23 GMT]]></title><description><![CDATA[<p>Wenn die Instanzen klein und schnell zu kopieren sind, und du noch dazu eh immer mit einer fixen (und kleinen) Maximalanzahl arbeitest, dann nimm doch einfach ein stinknormales Array... nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1201102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201102</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 02 Jan 2007 13:10:23 GMT</pubDate></item></channel></rss>