<?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[Iteration über map: Assert]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich iteriere in meinem Programm folgendermaßen über eine map:</p>
<pre><code class="language-cpp">std::map&lt;Object*, std::set&lt;uint&gt;&gt;	mObjects;

for(auto it = mObjects.begin(); it != mObjects.end(); ++it) {
   Object* obj = it-&gt;first;

   auto it2 = mObjects.find(obj);		
   mObjects.erase(it2);	
}
</code></pre>
<p>Diese Schleife schmiert bei mir mit einer Assertion irgendwo in map ab. Ich weiß das der Code sinnfrei ist - ich will aus Lernzwecken nur verstehen WIESO dieser Code abstürzt. Ich versteh es nicht ganz, weil ich dachte erase() invalidiert bei map oder set NICHT die Iteratoren?</p>
<p>Kann mir das jemand erklären? <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293595/iteration-über-map-assert</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 07:24:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293595.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 06 Oct 2011 16:25:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Iteration über map: Assert on Thu, 06 Oct 2011 16:25:58 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich iteriere in meinem Programm folgendermaßen über eine map:</p>
<pre><code class="language-cpp">std::map&lt;Object*, std::set&lt;uint&gt;&gt;	mObjects;

for(auto it = mObjects.begin(); it != mObjects.end(); ++it) {
   Object* obj = it-&gt;first;

   auto it2 = mObjects.find(obj);		
   mObjects.erase(it2);	
}
</code></pre>
<p>Diese Schleife schmiert bei mir mit einer Assertion irgendwo in map ab. Ich weiß das der Code sinnfrei ist - ich will aus Lernzwecken nur verstehen WIESO dieser Code abstürzt. Ich versteh es nicht ganz, weil ich dachte erase() invalidiert bei map oder set NICHT die Iteratoren?</p>
<p>Kann mir das jemand erklären? <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2128134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2128134</guid><dc:creator><![CDATA[Wall2]]></dc:creator><pubDate>Thu, 06 Oct 2011 16:25:58 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration über map: Assert on Thu, 06 Oct 2011 16:30:16 GMT]]></title><description><![CDATA[<p>Es invalidiert zumindest Iteratoren auf das gelöschte Objekt, soviel sollte auch ohne Standard-Wälzen klar sein. Dein ++it geht also in die Hose, weil logischerweise immer it==it2 gilt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2128137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2128137</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 06 Oct 2011 16:30:16 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration über map: Assert on Thu, 06 Oct 2011 16:44:27 GMT]]></title><description><![CDATA[<p>Bei assoziativen Containern besteht der Trick darin, mit</p>
<pre><code class="language-cpp">map.erase(itr++)
</code></pre>
<p>eine Lösch-Iteration durchzuführen. Die anderen Iteratoren bleiben ja valid, und <code>itr</code> ist zum Zeitpunkt des Löschens schon beim nächsten Element.</p>
<p><code>++itr</code> auch bei Nicht-Löschen nicht vergessen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2128139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2128139</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 06 Oct 2011 16:44:27 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration über map: Assert on Thu, 06 Oct 2011 16:55:48 GMT]]></title><description><![CDATA[<p>Warum hat man <code>map::erase</code> nicht aehnlich <code>list::erase</code> gestalltet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2128143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2128143</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 06 Oct 2011 16:55:48 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration über map: Assert on Thu, 06 Oct 2011 18:05:33 GMT]]></title><description><![CDATA[<p>Sieht aus wie ein Designfehler.<br />
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2728.html#130" rel="nofollow">Defect Report #130</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2128172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2128172</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 06 Oct 2011 18:05:33 GMT</pubDate></item></channel></rss>