<?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[der ast auf dem man sitzt? iterator und list.erase()]]></title><description><![CDATA[<p>ich habe eine doppeltverlinkte liste mit eigenen objekten.</p>
<pre><code>std::list&lt;MyObject&gt; list
</code></pre>
<p>nun will ich mit</p>
<pre><code>std::list&lt;MyObject&gt;::iterator it
</code></pre>
<p>über diese liste iterieren, bei jedem element checken ob es gekillt werden darf, wenn ja killen mit</p>
<pre><code>list.erase(it)
</code></pre>
<p>In allen tutorials und codebeispielen die ich gefunden habe wurde das auch so geschrieben wie wir es haben. unsere vermutung ist jedoch, dass wir auf einem ast sitzen den wir absegen wollen.<br />
konsequenz:Speicherzugriffsfehler</p>
<p>Irgendjemand eine ahnung?</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/129016/der-ast-auf-dem-man-sitzt-iterator-und-list-erase</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 01:42:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129016.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Dec 2005 11:56:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 11:56:35 GMT]]></title><description><![CDATA[<p>ich habe eine doppeltverlinkte liste mit eigenen objekten.</p>
<pre><code>std::list&lt;MyObject&gt; list
</code></pre>
<p>nun will ich mit</p>
<pre><code>std::list&lt;MyObject&gt;::iterator it
</code></pre>
<p>über diese liste iterieren, bei jedem element checken ob es gekillt werden darf, wenn ja killen mit</p>
<pre><code>list.erase(it)
</code></pre>
<p>In allen tutorials und codebeispielen die ich gefunden habe wurde das auch so geschrieben wie wir es haben. unsere vermutung ist jedoch, dass wir auf einem ast sitzen den wir absegen wollen.<br />
konsequenz:Speicherzugriffsfehler</p>
<p>Irgendjemand eine ahnung?</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/938051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938051</guid><dc:creator><![CDATA[benshman]]></dc:creator><pubDate>Fri, 09 Dec 2005 11:56:35 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 11:58:30 GMT]]></title><description><![CDATA[<p>IIRC invalidiert erase alle Iteratoren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/938052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938052</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Fri, 09 Dec 2005 11:58:30 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 12:00:21 GMT]]></title><description><![CDATA[<p>ich versteh nicht was du meinst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/938053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938053</guid><dc:creator><![CDATA[benshman]]></dc:creator><pubDate>Fri, 09 Dec 2005 12:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 12:00:54 GMT]]></title><description><![CDATA[<p>Du kannst es so sehen dass du dir mit erase den Ast absägst auf dem du sitzt.<br />
Beim einfügen und löschen von elementen eines containers werden manche iteratoren ungültig. Welche ist abhängig vom container-typ.<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/938054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938054</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Fri, 09 Dec 2005 12:00:54 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 12:01:32 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">it = list.erase(it);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/938056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938056</guid><dc:creator><![CDATA[it]]></dc:creator><pubDate>Fri, 09 Dec 2005 12:01:32 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 12:03:02 GMT]]></title><description><![CDATA[<p>ich würde es nicht empfehlen - du benötigst einen gültigen Iterator, um weitermachen zu können und der gerade gelöscht ist nicht mehr gültig.</p>
<p>Also Fazit: kopieren, weiterzählen, und anschließend über die Kopie das Element löschen:</p>
<pre><code class="language-cpp">typedef list&lt;MyClass&gt;::iterator listit;
for(listit it=liste.begin();it!=liste.end();)
{
  listit kopie=it++;//post-Inkrement -&gt; kopie erhält Wert vor Inkrement
  if(loeschbar(*kopie)
    liste.erase(kopie);
}
</code></pre>
<p>Edit: Btw, bei std::list wird nur der gelöschte Iterator ungültig <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/938057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938057</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 09 Dec 2005 12:03:02 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 12:13:46 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typedef list&lt;MyClass&gt;::iterator listit;
for (listit it=liste.begin();it!=liste.end();)
{
  if (loeschbar(*it)) {
    it = liste.erase(it);
  } else {
    ++it;
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/938073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938073</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 09 Dec 2005 12:13:46 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 12:20:16 GMT]]></title><description><![CDATA[<p>einen haufen fehler hats verursacht. gehen erstmal essen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/938083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938083</guid><dc:creator><![CDATA[benshman]]></dc:creator><pubDate>Fri, 09 Dec 2005 12:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 13:22:54 GMT]]></title><description><![CDATA[<p>Warum verwendest du nicht gleich list::remove_if()?</p>
<pre><code class="language-cpp">bool checkFunc(int const&amp; val) {
	if(/* bedingung */) {
		return true;
	}
	return false;
}

liste.remove_if(&amp;checkFunc);
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/938142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938142</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Fri, 09 Dec 2005 13:22:54 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 13:44:20 GMT]]></title><description><![CDATA[<p>remove_if() ist hier gut geeignet, aber bedenke, dass du nachher noch erase aufrufen musst. Also konzeptionell:</p>
<pre><code class="language-cpp">erase(remove_if())
</code></pre>
<p>Ein kleiner Trick, der mir erstmals vor kurzem im Meyers (STL) aufgefallen ist:</p>
<pre><code class="language-cpp">l.erase(it++)
</code></pre>
<p>Ist kurz zu schreiben und korrekt (it steht nach dem Löschen am nächsten Element).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/938161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938161</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Fri, 09 Dec 2005 13:44:20 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 13:55:06 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<pre><code class="language-cpp">typedef list&lt;MyClass&gt;::iterator listit;
for (listit it=liste.begin();it!=liste.end();)
</code></pre>
</blockquote>
<p>- muss in der genericDef nich ein * nach dem objektnamen gesetzt werden?</p>
<p>- kann das sein dass in der forschleife das inkrement vergessen wurde?</p>
<p><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/938169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938169</guid><dc:creator><![CDATA[benshman]]></dc:creator><pubDate>Fri, 09 Dec 2005 13:55:06 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 13:56:44 GMT]]></title><description><![CDATA[<p>benshman schrieb:</p>
<blockquote>
<p>finix schrieb:</p>
<blockquote>
<pre><code class="language-cpp">typedef list&lt;MyClass&gt;::iterator listit;
for (listit it=liste.begin();it!=liste.end();)
</code></pre>
</blockquote>
<p>- muss in der genericDef nich ein * nach dem objektnamen gesetzt werden?</p>
</blockquote>
<p>Wie bitte?</p>
<blockquote>
<p>- kann das sein dass in der forschleife das inkrement vergessen wurde?</p>
</blockquote>
<p>Nicht vergessen, absichtlich ausgelassen (weil der Iterator bereits innerhalb der Schleife weitergezählt wird).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/938171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938171</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 09 Dec 2005 13:56:44 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 14:02:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typedef list&lt;MyClass*&gt;::iterator listit;
</code></pre>
<p>qausi so</p>
]]></description><link>https://www.c-plusplus.net/forum/post/938178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938178</guid><dc:creator><![CDATA[benshman]]></dc:creator><pubDate>Fri, 09 Dec 2005 14:02:05 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 14:04:57 GMT]]></title><description><![CDATA[<p>Das kommt ganz darauf an, wie deine Liste definiert ist - du benötigst den iterator des verwendeten Listentyps (und zu list&lt;MyObject&gt; aus deinem Eröffnungsbeitrag gehört list&lt;MyObject&gt;::iterator (ohne *)).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/938182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938182</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 09 Dec 2005 14:04:57 GMT</pubDate></item><item><title><![CDATA[Reply to der ast auf dem man sitzt? iterator und list.erase() on Fri, 09 Dec 2005 14:08:10 GMT]]></title><description><![CDATA[<p>super.</p>
<p>danke.klappt alles super!<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>danke nochmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/938187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/938187</guid><dc:creator><![CDATA[benshman]]></dc:creator><pubDate>Fri, 09 Dec 2005 14:08:10 GMT</pubDate></item></channel></rss>