<?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[random_shuffle auf std::list&amp;lt;&amp;gt;]]></title><description><![CDATA[<p>Hallo, meine C++ Referenz sagt aus: ...Diese Algorithmen sind <strong>Containerunabhängig</strong>, d.h. der Zugriff...erfolgt über Iteratoren...</p>
<p>Mit einem Vektor oder einem Array klappt es wunderbar</p>
<p>Nur eine std::list bekomme ich mit random_shuffle nicht gemischt.</p>
<p>no match for 'operator+' in '__first + 1' und verweist auf die stl_algo.h</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/225929/random_shuffle-auf-std-list-lt-gt</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 05:34:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/225929.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Oct 2008 08:48:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to random_shuffle auf std::list&amp;lt;&amp;gt; on Mon, 27 Oct 2008 08:48:32 GMT]]></title><description><![CDATA[<p>Hallo, meine C++ Referenz sagt aus: ...Diese Algorithmen sind <strong>Containerunabhängig</strong>, d.h. der Zugriff...erfolgt über Iteratoren...</p>
<p>Mit einem Vektor oder einem Array klappt es wunderbar</p>
<p>Nur eine std::list bekomme ich mit random_shuffle nicht gemischt.</p>
<p>no match for 'operator+' in '__first + 1' und verweist auf die stl_algo.h</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605384</guid><dc:creator><![CDATA[XHansWurstX]]></dc:creator><pubDate>Mon, 27 Oct 2008 08:48:32 GMT</pubDate></item><item><title><![CDATA[Reply to random_shuffle auf std::list&amp;lt;&amp;gt; on Mon, 27 Oct 2008 09:06:28 GMT]]></title><description><![CDATA[<p>Listen sind eine Ausnahme, weil sie sich aufgrund ihrer Struktur über einen anderen Algorithmus besser sortieren lassen als mit der std::sort Implementierung. Wenn Du Dir mal std::list genauer ansiehst, wirst Du feststellen, dass es dort eine Memberfunktion sort gibt.</p>
<p>Edit: Ach mist. Du willst ja random_shuffle haben. Das geht leider nicht mit Listen, weil sie keine Itaratoren für wahlfreien Zugriff haben. Es gibt verschiedene Klassen von Iteratoren, und random_shuffle braucht einen RandomAccessIterator.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605388</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 27 Oct 2008 09:06:28 GMT</pubDate></item><item><title><![CDATA[Reply to random_shuffle auf std::list&amp;lt;&amp;gt; on Mon, 27 Oct 2008 09:07:40 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Wenn Du Dir mal std::list genauer ansiehst, wirst Du feststellen, dass es dort eine Memberfunktion sort gibt.</p>
</blockquote>
<p>Ähem, ich wollte das Gegenteil <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="😉"
    /> Eine extrem unsortierte Liste</p>
<p>Ok, wir haben uns überschnitten, k, trotzdem Danke. Mich verwirrte der Begriff containerunabhängig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605393</guid><dc:creator><![CDATA[XHansWurstX]]></dc:creator><pubDate>Mon, 27 Oct 2008 09:07:40 GMT</pubDate></item><item><title><![CDATA[Reply to random_shuffle auf std::list&amp;lt;&amp;gt; on Mon, 27 Oct 2008 09:12:29 GMT]]></title><description><![CDATA[<p>random_shuffle braucht einen RandomAccessIterator, was std::list nun mal nicht bietet..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605397</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 27 Oct 2008 09:12:29 GMT</pubDate></item><item><title><![CDATA[Reply to random_shuffle auf std::list&amp;lt;&amp;gt; on Mon, 27 Oct 2008 09:17:48 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>random_shuffle braucht einen RandomAccessIterator, was std::list nun mal nicht bietet..</p>
</blockquote>
<p>Bin ich eigentlich unsichtbar, oder wieso werde ich immer widerholt? <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/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605399</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 27 Oct 2008 09:17:48 GMT</pubDate></item><item><title><![CDATA[Reply to random_shuffle auf std::list&amp;lt;&amp;gt; on Mon, 27 Oct 2008 09:31:57 GMT]]></title><description><![CDATA[<p>Mach doch irgend sowas (ungetestet):</p>
<pre><code class="language-cpp">template&lt;class T&gt;
void list_random_shuffle(list&lt;T&gt; &amp;list){
  vector&lt;T&gt; tmp(list.begin(), list.end());
  random_shuffle(tmp.begin(), tmp.end());
  list.assign(tmp.begin(), tmp.end());
}
</code></pre>
<p>Nicht unbedingt performant aber simpel. <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>// EDIT: doch lieber assign</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605401</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Mon, 27 Oct 2008 09:31:57 GMT</pubDate></item><item><title><![CDATA[Reply to random_shuffle auf std::list&amp;lt;&amp;gt; on Mon, 27 Oct 2008 09:25:21 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>random_shuffle braucht einen RandomAccessIterator, was std::list nun mal nicht bietet..</p>
</blockquote>
<p>Bin ich eigentlich unsichtbar, oder wieso werde ich immer widerholt? <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/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Naja. Editieren ist nich. <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>(Bei mir kommt es halt manchmal vor, dass ich auf antworten klicke und während es lädt mach ich bei meinem eigenen Programm weiter und dann switch ich zurück und schreibe..)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605406</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 27 Oct 2008 09:25:21 GMT</pubDate></item><item><title><![CDATA[Reply to random_shuffle auf std::list&amp;lt;&amp;gt; on Mon, 27 Oct 2008 09:27:03 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Mach doch irgend sowas (ungetestet):<br />
...<br />
Nicht unbedingt performant aber simpel. <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>Jo, das könnte klappen. Danke...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605407</guid><dc:creator><![CDATA[XHansWurstX]]></dc:creator><pubDate>Mon, 27 Oct 2008 09:27:03 GMT</pubDate></item><item><title><![CDATA[Reply to random_shuffle auf std::list&amp;lt;&amp;gt; on Mon, 27 Oct 2008 09:34:22 GMT]]></title><description><![CDATA[<p>XHansWurstX schrieb:</p>
<blockquote>
<p>Mich verwirrte der Begriff containerunabhängig.</p>
</blockquote>
<p>Containerunabhängig heisst, dass die Algorithmen nicht von den Container abhängen (logisch, ja?). Die Algorithmen hängen allerdings von den Iteratoren ab und das ist der entscheidende Punkt. <code>std::list</code> liefert, wie schon bereits erwähnt, nicht die richtigen Iteratoren.</p>
<p>Jetzt wirst du wohl sagen: &quot;Ja aber, dann sind die Algorithmen doch Containerabhängig, einfach indirekt über ihre Iteratoren!&quot;<br />
Das stimmt allerdings nicht ganz. Du kannst die Iteratoren von <code>std::list</code> in eigene Iteratoren kapseln, welche die Voraussetzungen für RandomAccessIterators erfüllen. Die werden einfach wahrscheinlich ziemlich ineffizient sein, aber dann könntest du auch <code>random_schuffle</code> auf eine <code>std::list</code> anwenden.<br />
Viel entscheidender aber noch ist, dass du beliebe Container selber bauen kannst. Sobald deine Container Random-Access-Iteratoren zur Verfügung stellen, kannst du sie mit <code>random_shuffle</code> verwenden. Deshalb eben Containerunabhängig.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605410</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 27 Oct 2008 09:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to random_shuffle auf std::list&amp;lt;&amp;gt; on Mon, 27 Oct 2008 19:37:43 GMT]]></title><description><![CDATA[<p>Was man auch machen kann, um z.B. das unnötige Kopieren zu verhindern ist einen Container-Wrapper zu schreiben, der auch auf sequentielle Container Random Access ermöglicht. Das kann man über einen Vector von Iteratoren lösen. Das ganze könnte dann in etwa so aussehen:</p>
<pre><code class="language-cpp">std::list&lt;int&gt; int_list;
//...
RandomAccess&lt; std::list&lt;int&gt; &gt; random_access(int_list);
std::random_shuffle(random_access.begin(), random_access.end());

std::copy(int_list.begin(), int_list.end(), 
	std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
</code></pre>
<p>Dafür muss RandomAccess allerdings mit etwas Aufwand zu einem gültigen Container (z.B. mit eigenen Iteratoren) gemacht werden. Der Vorteil ist, dass man das einmal schreibt und dann für alle sequentiellen Container verwenden kann.</p>
<p>Was du noch beachten solltest: Unter Umständen ist es angebrachter direkt einen std::vector zu verwenden. Jetzt sagst du bestimmt: Aber halt, ich füge doch öfter mal Elemente in der Mitte ein und lösche auch mal einige. Trotzdem kann es sein (besonders bei relativ wenig Elementen), dass ein std::vector immer noch performanter ist als eine std::list. Ich habe schon Tests gesehen, die zeigten, dass sich std::list auch bei häufigerem einfügen erst ab 50.000 Elementen &quot;gelohnt&quot; hat. Muss man aber für seinen Code am besten selber testen (ist ja nicht so schwierig, da std::Container ja zueinander kompatibel sind).</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605751</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Mon, 27 Oct 2008 19:37:43 GMT</pubDate></item></channel></rss>