<?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[std::remove. Löscht nicht alle Elemente?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgenden Code.</p>
<pre><code class="language-cpp">using namespace std;

int main()
{
    vector&lt;int&gt; vec;
    vector&lt;int&gt; bvec;[code]
    for(int i = 1; i&lt;=20; ++i)
    {
        vec.push_back(i);
        if(i%2 == 0)
         bvec.push_back(i);
    }
    for(vector&lt;int&gt;::iterator iter = bvec.begin(); iter != bvec.end(); ++iter)
    {
        remove(vec.begin(), vec.end(), *iter);
    }

    for(vector&lt;int&gt;::iterator iter = vec.begin(); iter != vec.end(); ++iter)
    {
        cout &lt;&lt; *iter &lt;&lt; endl;
    }
}
</code></pre>
<p>Die erste Schleife soll beide Vektoren füllen. Den ersten mit Zahlen [1; 20] und den zweiten nur mit geraden Zahlen. Die zweite Schleife löscht alle Zahlen aus bvec in vec. Die dritte gibt das ganze aus. Leider sieht die Ausgabe so aus:<br />
(Anzahl der '20' stimmt nicht. Es werden insgesamt genau 20 Zahlen ausgegeben.)</p>
<blockquote>
<p>1<br />
3<br />
5<br />
7<br />
9<br />
11<br />
13<br />
15<br />
17<br />
19<br />
20<br />
20<br />
20<br />
20<br />
[...]</p>
</blockquote>
<p>Jetzt wundere ich mich über die Ausgabe sehr. Müssten die 20iger nicht komplett fehlen? Und warum ist die Vectorgrößte immernoch 20? (mit size() abgefragt)<br />
Nutze ich remove etwa völlig falsch?</p>
<p>Panke</p>
<p>Edit:</p>
<p>Aaaaah - da hab ich mich im Forum verlaufen. Kann mich einer nach C++ verschieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/160072/std-remove-löscht-nicht-alle-elemente</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 04:39:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160072.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Sep 2006 16:43:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::remove. Löscht nicht alle Elemente? on Thu, 21 Sep 2006 17:45:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgenden Code.</p>
<pre><code class="language-cpp">using namespace std;

int main()
{
    vector&lt;int&gt; vec;
    vector&lt;int&gt; bvec;[code]
    for(int i = 1; i&lt;=20; ++i)
    {
        vec.push_back(i);
        if(i%2 == 0)
         bvec.push_back(i);
    }
    for(vector&lt;int&gt;::iterator iter = bvec.begin(); iter != bvec.end(); ++iter)
    {
        remove(vec.begin(), vec.end(), *iter);
    }

    for(vector&lt;int&gt;::iterator iter = vec.begin(); iter != vec.end(); ++iter)
    {
        cout &lt;&lt; *iter &lt;&lt; endl;
    }
}
</code></pre>
<p>Die erste Schleife soll beide Vektoren füllen. Den ersten mit Zahlen [1; 20] und den zweiten nur mit geraden Zahlen. Die zweite Schleife löscht alle Zahlen aus bvec in vec. Die dritte gibt das ganze aus. Leider sieht die Ausgabe so aus:<br />
(Anzahl der '20' stimmt nicht. Es werden insgesamt genau 20 Zahlen ausgegeben.)</p>
<blockquote>
<p>1<br />
3<br />
5<br />
7<br />
9<br />
11<br />
13<br />
15<br />
17<br />
19<br />
20<br />
20<br />
20<br />
20<br />
[...]</p>
</blockquote>
<p>Jetzt wundere ich mich über die Ausgabe sehr. Müssten die 20iger nicht komplett fehlen? Und warum ist die Vectorgrößte immernoch 20? (mit size() abgefragt)<br />
Nutze ich remove etwa völlig falsch?</p>
<p>Panke</p>
<p>Edit:</p>
<p>Aaaaah - da hab ich mich im Forum verlaufen. Kann mich einer nach C++ verschieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142008</guid><dc:creator><![CDATA[Panke]]></dc:creator><pubDate>Thu, 21 Sep 2006 17:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to std::remove. Löscht nicht alle Elemente? on Thu, 21 Sep 2006 17:42:05 GMT]]></title><description><![CDATA[<p>hab öfters mal die Erfahrung mit der STL gemacht, dass beim Löschen von Elementen großer Mist passiert.<br />
Die Lösung war dann ein Element löschen, neu initialisieren. nicht schön aber es ging.<br />
std::remove gibt auch einen iterator zurück, der auf das Ende der verbleibenden Elemente zeigt, vielleicht kann man da was ausnutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142051</guid><dc:creator><![CDATA[megaweber]]></dc:creator><pubDate>Thu, 21 Sep 2006 17:42:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::remove. Löscht nicht alle Elemente? on Thu, 21 Sep 2006 17:44:56 GMT]]></title><description><![CDATA[<blockquote>
<p>std::remove gibt auch einen iterator zurück, der auf das Ende der verbleibenden Elemente zeigt, vielleicht kann man da was ausnutzen.</p>
</blockquote>
<p>Ah, gute Idee. Das hilft mir wahrscheinlich schon.</p>
<p>Danke</p>
<p>Panke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142059</guid><dc:creator><![CDATA[Panke]]></dc:creator><pubDate>Thu, 21 Sep 2006 17:44:56 GMT</pubDate></item><item><title><![CDATA[Reply to std::remove. Löscht nicht alle Elemente? on Thu, 21 Sep 2006 17:46:21 GMT]]></title><description><![CDATA[<p><a href="http://www.artima.com/cppsource/top_cpp_aha_moments.html" rel="nofollow">http://www.artima.com/cppsource/top_cpp_aha_moments.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142064</guid><dc:creator><![CDATA[aha!]]></dc:creator><pubDate>Thu, 21 Sep 2006 17:46:21 GMT</pubDate></item><item><title><![CDATA[Reply to std::remove. Löscht nicht alle Elemente? on Thu, 21 Sep 2006 19:15:56 GMT]]></title><description><![CDATA[<p>Was &quot;aha!&quot; sagen will ist, dass remove von alleine kein Element löscht. Dafür gibt es erase.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142163</guid><dc:creator><![CDATA[KPC]]></dc:creator><pubDate>Thu, 21 Sep 2006 19:15:56 GMT</pubDate></item><item><title><![CDATA[Reply to std::remove. Löscht nicht alle Elemente? on Fri, 22 Sep 2006 10:20:39 GMT]]></title><description><![CDATA[<p>KPC schrieb:</p>
<blockquote>
<p>Was &quot;aha!&quot; sagen will ist, dass remove von alleine kein Element löscht. Dafür gibt es erase.</p>
</blockquote>
<p>Oder besser: das erase-remove-Idiom.</p>
<pre><code class="language-cpp">vec.erase(remove(vec.begin(), vec.end(), value), vec.end());
</code></pre>
<p>Das std::remove Elemente nicht wirklich entfernt liegt daran, dass dieser Algorithmus keinen Zugriff auf den Container hat und damit natürlich auch keine Möglichkeit aus selbigen zu löschen. Das gilt übrigens für alle Standardalgorithmen, die auf Sequenzen arbeiten und es ist sehr wichtig, dass man diesen Umstand genau versteht, andernfalls wird man Probleme beim Einsatz der STL bekommen.</p>
<p>std::remove ordnet die übergebene Sequenz so an, dass die nicht zu entfernenden Elemente am Beginn der Sequenz liegen und liefert einen Iterator auf das letzte &quot;nicht entfernte&quot; Element.<br />
Eine Sequenz [begin, end) wird also so unterteilt, dass<br />
* [begin, newEnd) alle Werte != value enthält (also die, die nicht entfernt werden sollen)<br />
* [newEnd, end) enthält die &quot;entfernten&quot; Elemente in einer unspezifizierten Reiehenfolge (genaugenommen sind nicht mal die Werte der Elemente festgelegt).</p>
<p>Die Anzahl der Elemente in der gesamten Sequenz bleibt dabei unverändert.<br />
Mit dem erase-remove-Idiom erreicht man genau das Gewünschte: nachher enthält der Container nur noch genau die Elemente, die nicht entfernt werden sollten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142426</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 22 Sep 2006 10:20:39 GMT</pubDate></item><item><title><![CDATA[Reply to std::remove. Löscht nicht alle Elemente? on Fri, 22 Sep 2006 13:12:06 GMT]]></title><description><![CDATA[<p>Jau, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142547</guid><dc:creator><![CDATA[Panke]]></dc:creator><pubDate>Fri, 22 Sep 2006 13:12:06 GMT</pubDate></item><item><title><![CDATA[Reply to std::remove. Löscht nicht alle Elemente? on Fri, 22 Sep 2006 16:18:20 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=1819" rel="nofollow">rüdiger</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=8" rel="nofollow">Rund um die Programmierung</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142680</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 22 Sep 2006 16:18:20 GMT</pubDate></item></channel></rss>