<?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[Das Problem mit den Listen]]></title><description><![CDATA[<p>Halli Hallo Forum,</p>
<p>ich bin gerada dabei an einem list-Container zu verzweifeln.<br />
Mir fehlt eine Funktion/ein Operator wie at oder [] beim vector-Container...</p>
<p>Muss ich wirklich in einer beliebig langen Liste ständig Iteratoren inkrementieren um nur einen Wert aus der Liste auszulesen?<br />
Funktioniert hier denn gar nichts wie etwa sowas?:</p>
<pre><code class="language-cpp">list&lt;int&gt;::iterator it = int_list.begin() + 3;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/236365/das-problem-mit-den-listen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 00:30:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236365.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Mar 2009 23:03:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Das Problem mit den Listen on Fri, 13 Mar 2009 23:03:23 GMT]]></title><description><![CDATA[<p>Halli Hallo Forum,</p>
<p>ich bin gerada dabei an einem list-Container zu verzweifeln.<br />
Mir fehlt eine Funktion/ein Operator wie at oder [] beim vector-Container...</p>
<p>Muss ich wirklich in einer beliebig langen Liste ständig Iteratoren inkrementieren um nur einen Wert aus der Liste auszulesen?<br />
Funktioniert hier denn gar nichts wie etwa sowas?:</p>
<pre><code class="language-cpp">list&lt;int&gt;::iterator it = int_list.begin() + 3;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1679672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679672</guid><dc:creator><![CDATA[Listenproblem]]></dc:creator><pubDate>Fri, 13 Mar 2009 23:03:23 GMT</pubDate></item><item><title><![CDATA[Reply to Das Problem mit den Listen on Fri, 13 Mar 2009 23:09:03 GMT]]></title><description><![CDATA[<p>Nein, Random Access ist bei einer Liste nicht möglich. Wenn du ihn brauchst, nimmst du eben einen Container, der ihn unterstützt.</p>
<p>Was du aber machen kannst, ist <code>std::advance()</code> einzusetzen - nimm dann aber schlechte Performance in Kauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679674</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 13 Mar 2009 23:09:03 GMT</pubDate></item><item><title><![CDATA[Reply to Das Problem mit den Listen on Sat, 14 Mar 2009 12:18:00 GMT]]></title><description><![CDATA[<p>Die Frage deutet auf den falschen Einsatz des Containers. Listen sind dazu du, wenn man viel anfügt/löscht. Und z.B std::vector ist dazu da, wenn man genau diesen Zugriff braucht. Wenn du beides brauchst, kannst du dir mal die deque anschauen.<br />
Schaue, welche Anforderung der Container erfüllen muss und dann wähle den richtigen davon aus.</p>
<p>Hier gibt es eine gute Entscheidungshilfe:<br />
<a href="http://stackoverflow.com/questions/471432/in-which-scenario-do-i-use-a-particular-stl-container" rel="nofollow">http://stackoverflow.com/questions/471432/in-which-scenario-do-i-use-a-particular-stl-container</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679820</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 14 Mar 2009 12:18:00 GMT</pubDate></item><item><title><![CDATA[Reply to Das Problem mit den Listen on Sun, 15 Mar 2009 00:35:17 GMT]]></title><description><![CDATA[<p>Hi drakon,</p>
<p>die Grafik ist sehr hilfreich.<br />
Ich komme dabei auf deque.<br />
Allerdings vermisse ich da schon sehr das splice() von list<br />
gibt es eine möglichkeit das bei deques nachzuahmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680191</guid><dc:creator><![CDATA[Listenproblem]]></dc:creator><pubDate>Sun, 15 Mar 2009 00:35:17 GMT</pubDate></item><item><title><![CDATA[Reply to Das Problem mit den Listen on Sun, 15 Mar 2009 09:22:16 GMT]]></title><description><![CDATA[<p>Listenproblem schrieb:</p>
<blockquote>
<p>Allerdings vermisse ich da schon sehr das splice() von list<br />
gibt es eine möglichkeit das bei deques nachzuahmen?</p>
</blockquote>
<p>Du kannst dir eine globale Funktion dafür schreiben. Zum Beispiel so:</p>
<pre><code class="language-cpp">template &lt;typename Container&gt;
void splice(Container&amp; Source, typename Container::iterator SrcBegin, typename Container::iterator SrcEnd,
	Container&amp; Dest, typename Container::iterator DstPosition)
{
	Dest.insert(DstPosition, SrcBegin, SrcEnd);
	Source.erase(SrcBegin, SrcEnd);
}
</code></pre>
<p>Hat jetzt zwar nicht genau die gleiche Schnittstelle wie <code>std::list::splice()</code> , aber das lässt sich leicht anpassen. Diese Version scheint mir sowieso intuitiver... Natürlich kann man noch viel mehr machen, zum Beispiel als Quelle und Ziel unterschiedliche Typen ermöglichen, mehr Überladungen bereitstellen, und so weiter. Aber das überlass ich dir. <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><strong>Wichtig:</strong> Die Funktionalität ist natürlich nicht ganz gleich wie bei einer Liste. Hier kommt es zu Kopien und Zerstörungen, während bei der Liste nur Zeiger umgehängt werden. Zudem kann es in gewissen Containern wie <code>std::vector</code> recht ineffizient sein, in der Mitte einzufügen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680238</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 15 Mar 2009 09:22:16 GMT</pubDate></item><item><title><![CDATA[Reply to Das Problem mit den Listen on Sun, 15 Mar 2009 09:47:37 GMT]]></title><description><![CDATA[<p>Danke dir Nexus <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>Darf ich trotzdem mal fragen wie ineffizient das ganze wirklich ist?<br />
Zeigt sich das dann bei mehreren tausend Elementen oder bereits ab einigen zig Elementen?</p>
<p>Mein Container wird meiner meinung nach kaum über 100 Elemente hinauswachsen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680246</guid><dc:creator><![CDATA[Listenproblem]]></dc:creator><pubDate>Sun, 15 Mar 2009 09:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to Das Problem mit den Listen on Sun, 15 Mar 2009 09:56:07 GMT]]></title><description><![CDATA[<p>Das wird bei so wenigen Elementen kaum etwas ausmachen. Merken tut man die Differenzen der Container afaik erst ab ein paar Tausend Elementen. (Was aber kein Grund ist nicht die dafür gedachten Container zu nehmen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680249</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 15 Mar 2009 09:56:07 GMT</pubDate></item><item><title><![CDATA[Reply to Das Problem mit den Listen on Sun, 15 Mar 2009 09:57:39 GMT]]></title><description><![CDATA[<p>Wenn dir die Funktionalität wichtig ist, kannst du die Ineffektivität in Kauf nehmen. Bei 100 Elementen brauchst du dir nicht im Entferntesten Gedanken zu machen, das geht so extrem schnell. Bei 10 Millionen sähe es dann wieder anders aus... <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>Aber damit du trotzdem weisst, was ich gemeint habe und es auch in Fällen, in denen es wirklich wichtig ist, richtig anwendest, will ich es erklären. Ein <code>std::vector</code> ist intern wie ein Array aufgebaut, die Elemente liegen hintereinander im Speicher. Sagen wir, du hast 20000 Elemente in diesem Array und willst nun die Elemente 25-130 löschen bzw. dort einfügen. Nun müssen alle nachfolgenden Elemente umkopiert werden. Je mehr Elemente vorhanden sind, desto länger dauert das. Bei <code>std::deque</code> ist das Ganze weniger kritisch, da dieser Container aus mehreren Teilarrays aufgebaut ist und so normalerweise nicht die ganze Sequenz verschoben werden muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680250</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 15 Mar 2009 09:57:39 GMT</pubDate></item></channel></rss>