<?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[Während des Löschens in einem Vector]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich arbeite gerade an einem Kartenspiel, und bei der Funktion, wo die Spieler 5 Karten ziehen, wird von einem Vector zu einem anderen Vector Zufallselemente importiert. Danach wird das gleiche Element im ersten Vector gelöscht.</p>
<p>Das Problem:<br />
Wenn die for Schleife durchläuft, stürzt das Program beim zweiten Durchlauf ab. Er weist auf diese Funktion in _algobase.h hin:</p>
<pre><code class="language-cpp">template &lt;class _RandomAccessIter, class _OutputIter, class _Distance&gt;
inline _OutputIter
__copy(_RandomAccessIter __first, _RandomAccessIter __last,
       _OutputIter __result, const random_access_iterator_tag &amp;, _Distance*) {
  for (_Distance __n = __last - __first; __n &gt; 0; --__n) {
    *__result = *__first; // FEHLER!
    ++__first;
    ++__result;
  }
  return __result;
}
</code></pre>
<p>Meine Funktion schaut so aus:</p>
<pre><code class="language-cpp">void give_cards(vector&lt;card&gt; cards) {
                vector&lt;card&gt;::iterator pos;
                int card_nr;
                for (short int loop = 0; loop &lt; 5; ++loop) {
                        card_nr = rand() % cards.size();
                        advance(pos, card_nr);
                        player_cards.push_back(cards[card_nr]);
                        cards.erase(pos);
                }
        }
</code></pre>
<p>Gruß,<br />
Savadiv</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179143/während-des-löschens-in-einem-vector</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 05:00:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179143.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Apr 2007 19:25:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Wed, 18 Apr 2007 19:25:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich arbeite gerade an einem Kartenspiel, und bei der Funktion, wo die Spieler 5 Karten ziehen, wird von einem Vector zu einem anderen Vector Zufallselemente importiert. Danach wird das gleiche Element im ersten Vector gelöscht.</p>
<p>Das Problem:<br />
Wenn die for Schleife durchläuft, stürzt das Program beim zweiten Durchlauf ab. Er weist auf diese Funktion in _algobase.h hin:</p>
<pre><code class="language-cpp">template &lt;class _RandomAccessIter, class _OutputIter, class _Distance&gt;
inline _OutputIter
__copy(_RandomAccessIter __first, _RandomAccessIter __last,
       _OutputIter __result, const random_access_iterator_tag &amp;, _Distance*) {
  for (_Distance __n = __last - __first; __n &gt; 0; --__n) {
    *__result = *__first; // FEHLER!
    ++__first;
    ++__result;
  }
  return __result;
}
</code></pre>
<p>Meine Funktion schaut so aus:</p>
<pre><code class="language-cpp">void give_cards(vector&lt;card&gt; cards) {
                vector&lt;card&gt;::iterator pos;
                int card_nr;
                for (short int loop = 0; loop &lt; 5; ++loop) {
                        card_nr = rand() % cards.size();
                        advance(pos, card_nr);
                        player_cards.push_back(cards[card_nr]);
                        cards.erase(pos);
                }
        }
</code></pre>
<p>Gruß,<br />
Savadiv</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1268758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1268758</guid><dc:creator><![CDATA[Savadiv]]></dc:creator><pubDate>Wed, 18 Apr 2007 19:25:30 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Wed, 18 Apr 2007 19:38:24 GMT]]></title><description><![CDATA[<p>Vielleicht solltest du Variablen, die du benutzt, auch initialisieren. Das ist im Allgemeinen eine gute Idee.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1268767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1268767</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 18 Apr 2007 19:38:24 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Wed, 18 Apr 2007 19:45:30 GMT]]></title><description><![CDATA[<p>Welche Variablen denn? Wenn du &quot;player_cards&quot; meinst, die ist ein Teil der Klasse. Und cards ist ja sowieso ein Parameter, pos und card_nr werden auch initiliaziert bevor sie benützt werden? Oder täusch ich mich? (Ist nähmlich erst eines der ersten Übungsprogramme mit C++) <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/1268773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1268773</guid><dc:creator><![CDATA[Savadiv]]></dc:creator><pubDate>Wed, 18 Apr 2007 19:45:30 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Wed, 18 Apr 2007 19:47:57 GMT]]></title><description><![CDATA[<p>Savadiv schrieb:</p>
<blockquote>
<p>Welche Variablen denn? Wenn du &quot;player_cards&quot; meinst, die ist ein Teil der Klasse. Und cards ist ja sowieso ein Parameter, <strong>pos</strong> und card_nr werden auch initiliaziert bevor sie benützt werden? Oder täusch ich mich? (Ist nähmlich erst eines der ersten Übungsprogramme mit C++) <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>wo denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1268776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1268776</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 18 Apr 2007 19:47:57 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Wed, 18 Apr 2007 19:49:08 GMT]]></title><description><![CDATA[<p>und was ist mit pos?<br />
\edit: verdammt, wieder fehlen mir verdammte siebzehn sekunden <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1268777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1268777</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Wed, 18 Apr 2007 19:49:08 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Wed, 18 Apr 2007 19:52:10 GMT]]></title><description><![CDATA[<p>Andrey schrieb:</p>
<blockquote>
<p>\edit: verdammt, wieder fehlen mir verdammte siebzehn sekunden <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>
</blockquote>
<p>Keine Sorge, ich bin nur selten im Weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1268783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1268783</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 18 Apr 2007 19:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Wed, 18 Apr 2007 19:54:16 GMT]]></title><description><![CDATA[<p>Ah.. Ich hab geglaubt, indem ich advance benütze, dass pos auch automatisch initiliaziert wird. Dankesehr. <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/1268784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1268784</guid><dc:creator><![CDATA[Savadiv]]></dc:creator><pubDate>Wed, 18 Apr 2007 19:54:16 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Wed, 18 Apr 2007 20:04:33 GMT]]></title><description><![CDATA[<p>aha... und von &quot;irgendetwas&quot; auf &quot;irgendetwas + card_nr&quot; gesetzt wird <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>camper schrieb:</p>
<blockquote>
<p>Keine Sorge, ich bin nur selten im Weg.</p>
</blockquote>
<p>wenn du's nicht bist, ist das immer jemand anders... <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="🤡"
    /> aber ich bin immer zu spät^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1268791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1268791</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Wed, 18 Apr 2007 20:04:33 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Wed, 18 Apr 2007 23:31:21 GMT]]></title><description><![CDATA[<p>Du musst pos schon vor advance initialisieren, nämlich mit der &quot;Startposition&quot; von der weg &quot;advanced&quot; werden soll:</p>
<pre><code class="language-cpp">...
pos = cards.begin();
...
</code></pre>
<p>Da &quot;vector&quot; allerdings random-access Iteratoren hat kannst du auf &quot;pos&quot; und &quot;advance&quot; ganz verzichten und es einfach so schreiben:</p>
<pre><code class="language-cpp">cards.erase(cards.begin() + card_nr);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1268892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1268892</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 18 Apr 2007 23:31:21 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Thu, 19 Apr 2007 15:22:15 GMT]]></title><description><![CDATA[<p>Danke für die Erklärungen. <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>Ich habe da noch eine Frage, ich lösche ja dann das Element pos aus dem vector. Jedoch treten beim nächsten Aufruf, gleiche Karten bei unterschiedlichen Spielern auf... Pos ist doch gleich wie card_nr, oder?</p>
<p>Die aktuelle Funktion:</p>
<pre><code class="language-cpp">vector&lt;card&gt; give_cards(vector&lt;card&gt; cards) {
                vector&lt;card&gt;::iterator pos = cards.begin();
                int card_nr = 0;
                for (short int loop = 0; loop &lt; 5; ++loop) {
                        card_nr = rand() % cards.size();
                        advance(pos, card_nr);
                        player_cards.push_back(cards[card_nr]);
                        cards.erase(pos);
                }
                return cards;
        }
</code></pre>
<p>Ich benutze die Funktion so, damit &quot;cards&quot; aktualisiert wird:</p>
<pre><code class="language-cpp">cards = pl1.give_cards(cards);
cards = pl2.give_cards(cards);
</code></pre>
<p>Dennoch krieg ich eine Karte zwei Mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269352</guid><dc:creator><![CDATA[Savadiv]]></dc:creator><pubDate>Thu, 19 Apr 2007 15:22:15 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Thu, 19 Apr 2007 16:49:09 GMT]]></title><description><![CDATA[<p>sag mal, du hast doch einfach einen stapel mit karten oder? wär's da nicht einfacher, ein statisches bool-array mit 32-(oder wieviel karten hast du da?)-elementen anzulegen, und einfach jedes mal markieren: karte da /karte nicht da??</p>
<p>ansonsten wie gesagt: schmeiss die &quot;advance&quot; funktion und &quot;card_nr&quot; komplett raus. Hast doch random access aufs ganze array... wählst ne beliebige karte und schmeisst die raus, fertig...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269434</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Thu, 19 Apr 2007 16:49:09 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Thu, 19 Apr 2007 23:25:50 GMT]]></title><description><![CDATA[<p>EDIT: war unsinn...<br />
EDIT2: du musst &quot;pos&quot; IN DER SCHLEIFE direkt vor &quot;advance&quot; auf &quot;cards.begin()&quot; setzen, sonst schiebst du die Position ja immer weiter.<br />
Bzw. gleich ganz weglassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269668</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 19 Apr 2007 23:25:50 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Fri, 20 Apr 2007 06:30:58 GMT]]></title><description><![CDATA[<p>Savadiv schrieb:</p>
<blockquote>
<pre><code class="language-cpp">vector&lt;card&gt; give_cards(vector&lt;card&gt; cards)
</code></pre>
</blockquote>
<p>Die Funktion bekommt eine Kopie deines Kartenstapels übergeben und nimmt dann Karten von dieser Kopie. Der Originalstapel wird davon überhaupt nicht berührt. Als Lösung mußt du den Kartenstapel als Referenz übergeben:</p>
<pre><code class="language-cpp">void give_cards(vector&lt;card&gt;&amp;cards);//beachte das &amp;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1269725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269725</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Apr 2007 06:30:58 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Fri, 20 Apr 2007 12:32:47 GMT]]></title><description><![CDATA[<p>Nein, muss er nicht, denn er gibt den modifizierten Kartenstapel als Returnwert zurück.<br />
Ist zwar etwas doof gelöst, funktioniert aber.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269961</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 20 Apr 2007 12:32:47 GMT</pubDate></item><item><title><![CDATA[Reply to Während des Löschens in einem Vector on Sat, 21 Apr 2007 11:38:59 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Nein, muss er nicht, denn er gibt den modifizierten Kartenstapel als Returnwert zurück.</p>
</blockquote>
<p>OK, stimmt - dann Kommando zurück. Aber die Version mit der Referenz ist imho günstiger (und drückt klarer aus, was die Funktion macht - von den Performance-Vorteilen will ich gar nicht erst anfangen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270526</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 21 Apr 2007 11:38:59 GMT</pubDate></item></channel></rss>