<?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[Problem mit std::list und erase()]]></title><description><![CDATA[<p>Hallo! :xmas1:</p>
<p>Hab folgenden Code:</p>
<pre><code class="language-cpp">for(std::list&lt;boost::shared_ptr&lt;Living&gt;&gt;::iterator it = allLivingsList.begin();  it!=allLivingsList.end(); ++it) {
			(*it)-&gt;Engage(allLivingsList.front());
			if(!(*it)-&gt;isAlive()) {
				allLivingsList.erase(it);
			};
		}
</code></pre>
<p>Ich bekomme ein Laufzeitfehler nachdem ich ein Element mit erase(it) entfernt habe. Hab auch schon danach geschaut und die Ursache gefunden(it kann nicht mehr erhöht werden).</p>
<p>Als Walkaround gab es dann diesen Lösungsansatz:</p>
<pre><code class="language-cpp">for(std::list&lt;boost::shared_ptr&lt;Living&gt;&gt;::iterator it = allLivingsList.begin();  it!=allLivingsList.end();) { //Increment von it entfernt
			(*it)-&gt;Engage(allLivingsList.front());
			if(!(*it)-&gt;isAlive()) {
				allLivingsList.erase(it);
				break;	//Hinzugefügt
			} else {		//Hinzugefügt
				++it;		//Hinzugefügt
			}				//Hinzugefügt
		}
</code></pre>
<p>Das gibt zwar keinen Laufzeitfehler mehr, aber das ja nichtmehr dasselbe...<br />
Die Schleife wird nicht vollständig durchlaufen.<br />
Wie kann ich das am besten lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/296989/problem-mit-std-list-und-erase</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 16:15:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296989.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Dec 2011 14:18:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit std::list und erase() on Fri, 16 Dec 2011 14:18:42 GMT]]></title><description><![CDATA[<p>Hallo! :xmas1:</p>
<p>Hab folgenden Code:</p>
<pre><code class="language-cpp">for(std::list&lt;boost::shared_ptr&lt;Living&gt;&gt;::iterator it = allLivingsList.begin();  it!=allLivingsList.end(); ++it) {
			(*it)-&gt;Engage(allLivingsList.front());
			if(!(*it)-&gt;isAlive()) {
				allLivingsList.erase(it);
			};
		}
</code></pre>
<p>Ich bekomme ein Laufzeitfehler nachdem ich ein Element mit erase(it) entfernt habe. Hab auch schon danach geschaut und die Ursache gefunden(it kann nicht mehr erhöht werden).</p>
<p>Als Walkaround gab es dann diesen Lösungsansatz:</p>
<pre><code class="language-cpp">for(std::list&lt;boost::shared_ptr&lt;Living&gt;&gt;::iterator it = allLivingsList.begin();  it!=allLivingsList.end();) { //Increment von it entfernt
			(*it)-&gt;Engage(allLivingsList.front());
			if(!(*it)-&gt;isAlive()) {
				allLivingsList.erase(it);
				break;	//Hinzugefügt
			} else {		//Hinzugefügt
				++it;		//Hinzugefügt
			}				//Hinzugefügt
		}
</code></pre>
<p>Das gibt zwar keinen Laufzeitfehler mehr, aber das ja nichtmehr dasselbe...<br />
Die Schleife wird nicht vollständig durchlaufen.<br />
Wie kann ich das am besten lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2157727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2157727</guid><dc:creator><![CDATA[JJ_]]></dc:creator><pubDate>Fri, 16 Dec 2011 14:18:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::list und erase() on Fri, 16 Dec 2011 14:24:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">it = allLivingsList.erase(it);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2157733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2157733</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 16 Dec 2011 14:24:33 GMT</pubDate></item></channel></rss>