<?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[boost::ptr_map und erase durch iterator]]></title><description><![CDATA[<p>Servus,</p>
<p>meine Problem ist einfach:<br />
Durch eine Pointer Map durchiterieren, checken ob eine bestimmte bedingung erfüllt ist, und wenn nicht, den Eintrag aus der Map löschen.</p>
<p>Intuitiver Ansatz:</p>
<pre><code class="language-cpp">for( boost::ptr_map&lt;long, Foo&gt;::iterator i = map.begin(), e = map.end() ; i!=e ; i++)
{
  if (i-&gt;second-&gt;isInvalid())
     map.erase(i);
}
</code></pre>
<p>Jetzt weiß ich nicht, ob der iterator duch das erase() invalidiert wird und somit der nächste ++-Aufruf undefiniert sein könnte. ptr_map::erase gibt void zurück, und keinen neuen Iterator.</p>
<p>Wie kann ich sicherstellen, dass das funktioniert?</p>
<p>Gruß,<br />
Phil</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/260251/boost-ptr_map-und-erase-durch-iterator</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 09:34:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260251.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Feb 2010 19:58:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::ptr_map und erase durch iterator on Tue, 02 Feb 2010 19:59:33 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>meine Problem ist einfach:<br />
Durch eine Pointer Map durchiterieren, checken ob eine bestimmte bedingung erfüllt ist, und wenn nicht, den Eintrag aus der Map löschen.</p>
<p>Intuitiver Ansatz:</p>
<pre><code class="language-cpp">for( boost::ptr_map&lt;long, Foo&gt;::iterator i = map.begin(), e = map.end() ; i!=e ; i++)
{
  if (i-&gt;second-&gt;isInvalid())
     map.erase(i);
}
</code></pre>
<p>Jetzt weiß ich nicht, ob der iterator duch das erase() invalidiert wird und somit der nächste ++-Aufruf undefiniert sein könnte. ptr_map::erase gibt void zurück, und keinen neuen Iterator.</p>
<p>Wie kann ich sicherstellen, dass das funktioniert?</p>
<p>Gruß,<br />
Phil</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849402</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Tue, 02 Feb 2010 19:59:33 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_map und erase durch iterator on Tue, 02 Feb 2010 20:09:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typedef boost::ptr_map&lt;long, Foo&gt; FooMap;
for( FooMap::iterator i = map.begin(), e = map.end() ; i!=e ; /* nichts */) 
{ 
  if (i-&gt;second-&gt;isInvalid()) 
     map.erase(i++);
  else
     ++i; 
}
</code></pre>
<p>Das Typedef kann ich nebenbei nur empfehlen (an einem sinnvollen Ort, z.B. in der Klassendefinition). <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1849408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849408</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 02 Feb 2010 20:09:50 GMT</pubDate></item><item><title><![CDATA[Reply to boost::ptr_map und erase durch iterator on Tue, 02 Feb 2010 20:11:27 GMT]]></title><description><![CDATA[<p>Ahh okay, es funktioniert also genau analog zu std::map.<br />
Habe gerade meinen alten Forumsbeitrag dazu gefunden, da hatte ich wohl dasselbe Problem: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-243529.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-243529.html</a></p>
<p>Danke,<br />
Phil</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849412</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Tue, 02 Feb 2010 20:11:27 GMT</pubDate></item></channel></rss>