<?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[[beantwortet] STL list size]]></title><description><![CDATA[<p>Hallo ihr Lieben,</p>
<p>mal wieder eine naive Frage:</p>
<p>Ich bin gerade verwundert, dass der STL Container <code>list</code> bei dem Aufruf von <code>size()</code> nach dem neuen C++11 Standard eine konstante Komplexität hat.</p>
<p>Wenn ich das bisher richtig verstanden habe, dann hat <code>list</code> seine Größer immer dadurch bestimmt, dass es bei Aufruf von <code>size()</code> seine Elemente gezählt hat.</p>
<p>Das wurde scheinbar geändert? Wird jetzt immer ein Integer mitgeführt, der bei einfügen oder entfernen mitzählt? Sodass bei der Abfrage der Größe lediglich der Wert dieses integers ausgegeben wird?</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318945/beantwortet-stl-list-size</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 07:33:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318945.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 01 Aug 2013 09:13:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 09:41:14 GMT]]></title><description><![CDATA[<p>Hallo ihr Lieben,</p>
<p>mal wieder eine naive Frage:</p>
<p>Ich bin gerade verwundert, dass der STL Container <code>list</code> bei dem Aufruf von <code>size()</code> nach dem neuen C++11 Standard eine konstante Komplexität hat.</p>
<p>Wenn ich das bisher richtig verstanden habe, dann hat <code>list</code> seine Größer immer dadurch bestimmt, dass es bei Aufruf von <code>size()</code> seine Elemente gezählt hat.</p>
<p>Das wurde scheinbar geändert? Wird jetzt immer ein Integer mitgeführt, der bei einfügen oder entfernen mitzählt? Sodass bei der Abfrage der Größe lediglich der Wert dieses integers ausgegeben wird?</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342704</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Thu, 01 Aug 2013 09:41:14 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 09:18:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Wenn ich das bisher richtig verstanden habe, dann hat list seine Größer immer dadurch bestimmt, dass es bei Aufruf von size() seine Elemente gezählt hat.</p>
</blockquote>
<p>Nein, auch in pre-C++11 haben die meisten Implementierungen von list::size() eine konstante Laufzeitkomplexitaet gehabt. Aber du kannst gern in die verschieden Templatebibliotheken der einzelnen Kompiler hineinschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342706</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 01 Aug 2013 09:18:41 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 09:19:17 GMT]]></title><description><![CDATA[<p>Nein, auch in pre-C++11 haben die meisten Implementierungen von list::size() eine konstante Laufzeitkomplexitaet gehabt.[/quote]</p>
<p>Aha, okay.</p>
<p>Weil <a href="http://www.cplusplus.com/reference/list/list/size/" rel="nofollow">hier</a> eben unter <em>Complexity</em> bei C++98 <code>Up to linear</code> steht.</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342707</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Thu, 01 Aug 2013 09:19:17 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 09:33:46 GMT]]></title><description><![CDATA[<p>Ja, hier wird es etwas differenzierter dargestellt: <a href="http://www.sgi.com/tech/stl/List.html" rel="nofollow">http://www.sgi.com/tech/stl/List.html</a></p>
<blockquote>
<p>size_type size() const: Returns the size of the list. Note: you should not assume that this function is constant time. It is permitted to be O(N), where N is the number of elements in the list. If you wish to test whether a list is empty, you should write L.empty() rather than L.size() == 0.</p>
</blockquote>
<p>D.h. frueher sollte man nicht davon ausgehen, heite kann man davon ausgehen. <code>Up to linear</code> schliesst auch <code>constant</code> mit ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342714</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 01 Aug 2013 09:33:46 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 09:40:59 GMT]]></title><description><![CDATA[<p>Okay, okay.</p>
<p>Ich gebe mich geschlagen. <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="😉"
    /> <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>
<p>Viele Grüße,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342717</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Thu, 01 Aug 2013 09:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 09:41:32 GMT]]></title><description><![CDATA[<p>Mir wurde das früher mal so erklärt, dass manche std:list Implementationen ein O(1) std::list::splice() hätten, was etwas ganz tolles wäre aber nicht gleichzeitig mit einem O(1) std::list::size() ginge. Was da jetzt zum Paradigmenwechsel geführt hat würde ich gerne wissen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342718</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 01 Aug 2013 09:41:32 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 19:03:31 GMT]]></title><description><![CDATA[<p>Ganz einfach, da haben sich Leute durchgesetzt, die in ihrem Leben noch nie wirklich eine Liste gebraucht haben und haben deshalb die falsche Entscheidung getroffen. Zum Glück gibts boost::intrusive <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/2342826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342826</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Thu, 01 Aug 2013 19:03:31 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 19:25:26 GMT]]></title><description><![CDATA[<p>Hier ist die Abstimmung:<br />
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2921.html" rel="nofollow">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2921.html</a><br />
Der Punkt über N2923.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342829</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 01 Aug 2013 19:25:26 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 19:56:43 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Ganz einfach, da haben sich Leute durchgesetzt, die in ihrem Leben noch nie wirklich eine Liste gebraucht haben und haben deshalb die falsche Entscheidung getroffen. Zum Glück gibts boost::intrusive <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>
</blockquote>
<p>Die hatten sich ja schon lange vorher durchgesetzt, als sie die Liste mit einem O(1) size implementiert haben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342831</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 01 Aug 2013 19:56:43 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 20:30:04 GMT]]></title><description><![CDATA[<p>Ich verstehe den Sinn von size() mit O(1) irgendwie nicht so recht. In den seltenen Fällen in denen ich eine Liste eingesetzt habe, habe ich noch nie size() benötigt. Und auch beim allgemeinen Umgang mit einer Liste fällt mir außer debugging kein sinnvoller Use-Case für size() ein. Wieso also die Änderung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342834</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 01 Aug 2013 20:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 20:30:52 GMT]]></title><description><![CDATA[<p>Ich verstehe den Sinn von size() mit O(1) irgendwie nicht so recht. In den seltenen Fällen in denen ich eine Liste eingesetzt habe, habe ich noch nie size() benötigt. Und auch beim allgemeinen Umgang mit einer Liste fällt mir außer debugging kein sinnvoller Use-Case für size() ein. Wieso also die Änderung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342835</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 01 Aug 2013 20:30:52 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 20:40:26 GMT]]></title><description><![CDATA[<p>Hier wir ja eine Begründung geliefert, wobei ich sie auch nicht so ganz überzeugend finde: <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2923.pdf" rel="nofollow">http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2923.pdf</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342839</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 01 Aug 2013 20:40:26 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 21:44:43 GMT]]></title><description><![CDATA[<p>Die Situation ist jetzt sicher besser als zuvor, schliesslich konnte man sich zuvor auf keine der beiden Varianten verlassen.<br />
Besser wäre imo aber gewesen, gleichzeitig einen zweiten Listentyp in den Standard einzufügen, der eben konstantes splice anbietet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342842</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 01 Aug 2013 21:44:43 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 21:58:58 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Die Situation ist jetzt sicher besser als zuvor, schliesslich konnte man sich zuvor auf keine der beiden Varianten verlassen.<br />
Besser wäre imo aber gewesen, gleichzeitig einen zweiten Listentyp in den Standard einzufügen, der eben konstantes splice anbietet.</p>
</blockquote>
<p>Ich weiß nicht ob das nur dafür gerechtfertigt wäre einen eigenen Listentyp einzuführen. Ich denke, wenn man solch starke Anforderung an die Performance in speziellen Fällen hat, versucht man eh am besten eine stl Implementation zu finden, die da am besten passt, ähnlich wie es welche gibt die eher auf Codegröße optimiert sind, während andere eher auf Geschwindigkeit optimiert sind. Früher hatten die Bibliothekshersteller in dem Punkt mit Splice noch die Wahl.</p>
<p>Ich finde dabei das O(1) splice eigentlich sehr sinnvol:.Es gibt wenig gute Gründe ausgerechnet eine std::list als container zu wählen. Einer ist, wenn man so etwas wie ein effizientes Splice wirklich braucht. Dann sollte es aber auch wirklich effizient sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342844</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 01 Aug 2013 21:58:58 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Thu, 01 Aug 2013 22:23:44 GMT]]></title><description><![CDATA[<p>TNA schrieb:</p>
<blockquote>
<p>Ich finde dabei das O(1) splice eigentlich sehr sinnvol:.Es gibt wenig gute Gründe ausgerechnet eine std::list als container zu wählen. Einer ist, wenn man so etwas wie ein effizientes Splice wirklich braucht. Dann sollte es aber auch wirklich effizient sein.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Die offiziellen Gründe entkräftet:<br />
- size() is heavily used -- von wem denn und wozu?<br />
- average programmer expect it to be constant -- ah, vom Durchschnittsprogger. Der erwartet aber auch, dass list effizienter als vector ist, wenn kein random access gebraucht wird. Was ein average programmer (was auch immer das heissen soll) <em>erwartet</em> (es ist ja nicht so, dass der das nicht lernen kann), kann mir vollkommen egal sein.<br />
- splicing is most important when the contained element types are expensive or impossible to copy -- Das Problem wird durch vector&lt;unique_ptr&lt;Objekt&gt;&gt; gelöst. Splicing ist genau dann wichtig, wenn ich ein schnelles splice will!!!11<br />
- traversing a range is O(n) but very fast -- blarg? vector&lt;unique_ptr&gt; ist dann sogar &quot;very very fast&quot;.</p>
<p>Gegenargumente:<br />
- vector, deque und vector&lt;unique_ptr&lt;&gt;&gt; decken fast alle Use-Cases ab, bei denen List ohne splice verwendet wird.<br />
- Wer ein konstantes size() will, kann das mit einer normalen list ganz leicht mitcachen.<br />
- Wer ein konstantes splice() will, kann das <strong>nicht</strong> mit einer C++11-list machen.</p>
<p>Mir kommt die ganze Aktion sehr unprofessionell vor. forward_list ist nicht immer eine Alternative. std::list ist so absolut nutzlos und ohne Existenzgrundlage, ich wüsste wichtigere Kleinigkeiten für die Standardbibliothek.</p>
<p>Bleibt einem Selbstbau oder Boost.Intrusive.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342847</guid><dc:creator><![CDATA[oheins]]></dc:creator><pubDate>Thu, 01 Aug 2013 22:23:44 GMT</pubDate></item><item><title><![CDATA[Reply to [beantwortet] STL list size on Fri, 02 Aug 2013 07:25:51 GMT]]></title><description><![CDATA[<p>Ganz einfach: Listen implementieren macht soooo viel Spaß und endlich hat man dafür ne Ausrede. <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="🤡"
    /><br />
&quot;Hey du! Warum implementierst du die Liste selbst und nimmst nicht std::list ?&quot; - &quot;Öhhh ... öhhh ... weil ich vielleicht mal ein O(1) splice brauche!&quot; - &quot;Gut, weitermachen!&quot; :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342866</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 02 Aug 2013 07:25:51 GMT</pubDate></item></channel></rss>