<?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[Was gibt std::map::erase() zurück?]]></title><description><![CDATA[<p>Ich habe eine Frage:</p>
<p>Laut <a href="http://www.dinkumware.com/manuals/?manual=compleat&amp;Search=map&amp;page=map.html#map::erase" rel="nofollow">Dinkumware</a> und der MSDN gibt map::erase den iterator auf das Element nach dem gelöschten, bzw. end() zurück, falls die map danach leer ist.</p>
<p>Der GCC (und der Comeau(!)) beschweren sich aber über folgenden Code:</p>
<pre><code class="language-cpp">#include &lt;map&gt;

using namespace std;

typedef map&lt;int,int&gt; mapType;

int main(void)
{
    mapType theMap;
    ++theMap[5];
    ++theMap[7];
    mapType::iterator it = theMap.begin();
    it = theMap.erase(it);
    return(0);
}
</code></pre>
<p>Der Fehler lautet wie folgt:</p>
<pre><code>&quot;ComeauTest.c&quot;, line 13: error: no operator &quot;=&quot; matches these operands
            operand types are: std::_Rb_tree_iterator&lt;std::pair&lt;const int,
                      int&gt;, std::pair&lt;const int, int&gt; &amp;, std::pair&lt;const int,
                      int&gt; *&gt; = void
      it = theMap.erase(it);
         ^

1 error detected in the compilation of &quot;ComeauTest.c&quot;.
</code></pre>
<p>Also gibt deren Meinung nach map::erase void zurück...</p>
<p>Das nennt sich dann standarisiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/162146/was-gibt-std-map-erase-zurück</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 10:54:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/162146.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Oct 2006 14:55:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was gibt std::map::erase() zurück? on Sun, 15 Oct 2006 14:55:31 GMT]]></title><description><![CDATA[<p>Ich habe eine Frage:</p>
<p>Laut <a href="http://www.dinkumware.com/manuals/?manual=compleat&amp;Search=map&amp;page=map.html#map::erase" rel="nofollow">Dinkumware</a> und der MSDN gibt map::erase den iterator auf das Element nach dem gelöschten, bzw. end() zurück, falls die map danach leer ist.</p>
<p>Der GCC (und der Comeau(!)) beschweren sich aber über folgenden Code:</p>
<pre><code class="language-cpp">#include &lt;map&gt;

using namespace std;

typedef map&lt;int,int&gt; mapType;

int main(void)
{
    mapType theMap;
    ++theMap[5];
    ++theMap[7];
    mapType::iterator it = theMap.begin();
    it = theMap.erase(it);
    return(0);
}
</code></pre>
<p>Der Fehler lautet wie folgt:</p>
<pre><code>&quot;ComeauTest.c&quot;, line 13: error: no operator &quot;=&quot; matches these operands
            operand types are: std::_Rb_tree_iterator&lt;std::pair&lt;const int,
                      int&gt;, std::pair&lt;const int, int&gt; &amp;, std::pair&lt;const int,
                      int&gt; *&gt; = void
      it = theMap.erase(it);
         ^

1 error detected in the compilation of &quot;ComeauTest.c&quot;.
</code></pre>
<p>Also gibt deren Meinung nach map::erase void zurück...</p>
<p>Das nennt sich dann standarisiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155167</guid><dc:creator><![CDATA[Phoemuex]]></dc:creator><pubDate>Sun, 15 Oct 2006 14:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt std::map::erase() zurück? on Sun, 15 Oct 2006 14:58:29 GMT]]></title><description><![CDATA[<p>ist halt nur bei visual c++ so</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155168</guid><dc:creator><![CDATA[voidt]]></dc:creator><pubDate>Sun, 15 Oct 2006 14:58:29 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt std::map::erase() zurück? on Sun, 15 Oct 2006 15:01:24 GMT]]></title><description><![CDATA[<p>Laut Standard hat die Methode mit einem Iterator als Übergabe als Returntype void. Somit alles korrenkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155170</guid><dc:creator><![CDATA[ISO ANSI DIN ETC]]></dc:creator><pubDate>Sun, 15 Oct 2006 15:01:24 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt std::map::erase() zurück? on Sun, 15 Oct 2006 15:38:06 GMT]]></title><description><![CDATA[<p>Nur bei einem sequenziellen Container gibt erase einen Iterator zurück, bei assoziativen Containern keinen Wert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155189</guid><dc:creator><![CDATA[Letit]]></dc:creator><pubDate>Sun, 15 Oct 2006 15:38:06 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt std::map::erase() zurück? on Thu, 16 Aug 2007 09:37:25 GMT]]></title><description><![CDATA[<p>okay... darüber stolper ch auch gerade.</p>
<p>im standard ist void erase(iterator) definiert.</p>
<p>meine schleife (pseudo) in VS:</p>
<pre><code class="language-cpp">for(map&lt;int,int &gt;::iterator pos=tree.begin(); pos!=tree.end(); )
{
   if(pos-&gt;second == 1)
   {
      ...
      ++pos;
   }
   else pos = tree.erase(pos);
}
</code></pre>
<p>gib es da ne besser möglichkeit als dies durch</p>
<pre><code class="language-cpp">for(map&lt;int,int &gt;::iterator pos=tree.begin(); pos!=tree.end(); )
{
   if(pos-&gt;second == 1)
   {
      ...
      ++pos;
   }
   else
   {
       map&lt;int,int &gt;::iterator tmp = pos;
       ++pos;
       tree.erase(tmp);
   }
}
</code></pre>
<p>[/cpp]</p>
<p>zu ersetzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345580</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 16 Aug 2007 09:37:25 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt std::map::erase() zurück? on Thu, 16 Aug 2007 09:41:08 GMT]]></title><description><![CDATA[<p>Du könntest den Postfix-Inkrement nutzen:</p>
<pre><code class="language-cpp">for(map&lt;int,int &gt;::iterator pos=tree.begin(); pos!=tree.end(); )
{
   if(pos-&gt;second == 1)
   {
      ...
      ++pos;
   }
   else
       tree.erase(pos++);//pos läuft weiter und anschließend bekommt tree seine ehemalige Position zum Löschen übergeben
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1345582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345582</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 16 Aug 2007 09:41:08 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt std::map::erase() zurück? on Thu, 16 Aug 2007 09:53:14 GMT]]></title><description><![CDATA[<p>quasi die interne kopie die bei iteratoren beim postfix++ gemacht wird, ja?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345592</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 16 Aug 2007 09:53:14 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt std::map::erase() zurück? on Thu, 16 Aug 2007 10:02:19 GMT]]></title><description><![CDATA[<p>muffmolch schrieb:</p>
<blockquote>
<p>quasi die interne kopie die bei iteratoren beim postfix++ gemacht wird, ja?</p>
</blockquote>
<p>Genau die - der Vorteil gegenüber deiner Version ist, daß der Compiler anonyme Variablen oft besser optimieren kann (und du hast weniger zu schreiben).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345602</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 16 Aug 2007 10:02:19 GMT</pubDate></item><item><title><![CDATA[Reply to Was gibt std::map::erase() zurück? on Thu, 16 Aug 2007 10:56:00 GMT]]></title><description><![CDATA[<p>und letzteres macht den code übersichtlicher udn weniger fehleranfällig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345633</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Thu, 16 Aug 2007 10:56:00 GMT</pubDate></item></channel></rss>