<?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[std::vector: element löschen - debug assertion failed!]]></title><description><![CDATA[<p>Hallo Leute,<br />
bin schon stundenlang am PC wegen diesem Problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> :<br />
ich möchte eine Funltion proggen, die alle Elemente 'zuLoeschen' aus dem Vektor entfernt.<br />
So war meine Idee:</p>
<pre><code class="language-cpp">void EraseElems(Typ zuLoeschen) {
	for(std::vector&lt;Typ&gt;::const_iterator i = Elements.begin(); i != Elements.end(); i++) {
		if(*i == zuLoeschen) Elements.erase(i);
	}
}
</code></pre>
<p>Das einzige Problem ist, dass eine Fehlermeldung erscheint:<br />
'Debug Assertion Failed!(...)'<br />
Bin total mit meinem C++ am Ende! <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="😕"
    /><br />
Könnt ihr mir sagen, was ich falsch mache???<br />
Ich glaube, es liegt an der erase() - methode.</p>
<p>Danke im Voraus! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Paul</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271712/std-vector-element-löschen-debug-assertion-failed</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 06:20:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271712.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Aug 2010 17:37:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Mon, 02 Aug 2010 17:37:11 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
bin schon stundenlang am PC wegen diesem Problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> :<br />
ich möchte eine Funltion proggen, die alle Elemente 'zuLoeschen' aus dem Vektor entfernt.<br />
So war meine Idee:</p>
<pre><code class="language-cpp">void EraseElems(Typ zuLoeschen) {
	for(std::vector&lt;Typ&gt;::const_iterator i = Elements.begin(); i != Elements.end(); i++) {
		if(*i == zuLoeschen) Elements.erase(i);
	}
}
</code></pre>
<p>Das einzige Problem ist, dass eine Fehlermeldung erscheint:<br />
'Debug Assertion Failed!(...)'<br />
Bin total mit meinem C++ am Ende! <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="😕"
    /><br />
Könnt ihr mir sagen, was ich falsch mache???<br />
Ich glaube, es liegt an der erase() - methode.</p>
<p>Danke im Voraus! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Paul</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935279</guid><dc:creator><![CDATA[paulrei]]></dc:creator><pubDate>Mon, 02 Aug 2010 17:37:11 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Mon, 02 Aug 2010 17:42:28 GMT]]></title><description><![CDATA[<p>Wenn du erase auf einen Iterator machst, wird dieser Iterator ungültig. Ein Inkrement oder erneutes Derefferenzieren machst du dann in irgendwelchem Speicher, was folglich scheitert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935281</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Mon, 02 Aug 2010 17:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Mon, 02 Aug 2010 17:47:06 GMT]]></title><description><![CDATA[<p>Und um die nächste Frage auch gleich zu beantworten ein kleiner Tipp:<br />
Schau mal, was <a href="http://www.cplusplus.com/reference/stl/vector/erase/" rel="nofollow">vector::erase</a> zurück gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935284</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 02 Aug 2010 17:47:06 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Mon, 02 Aug 2010 17:48:29 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void EraseElems(Typ zuLoeschen) {
    for(std::vector&lt;Typ&gt;::const_iterator i = Elements.begin(); i != Elements.end(); ) {
        if(*i == zuLoeschen)
			i = Elements.erase(i);
		else
			++i;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1935285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935285</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Mon, 02 Aug 2010 17:48:29 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Mon, 02 Aug 2010 17:52:04 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void EraseElems(Typ zuLoeschen) {
    for(std::vector&lt;Typ&gt;::const_iterator i = Elements.begin(); i != Elements.end(); ) {
        if(*i == zuLoeschen)
			i = Elements.erase(i);
		else
			++i;
    }
}
</code></pre>
</blockquote>
<p>Statt ineffizienten Code mit O(n^2) Laufzeit zu schreiben, kann man natürlich auch bereits existierenden Standard-Code wiederverwenden und <code>std::remove()</code> bzw. <code>std::remove_if()</code> einsetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935288</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 02 Aug 2010 17:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Mon, 02 Aug 2010 21:05:44 GMT]]></title><description><![CDATA[<p>Du willst quasi Elemente mit einem gewissen Wert aus deinem Vector löschen.<br />
Dazu ist die std::list meines Erachtens besser geeignet.<br />
Siehe: <a href="http://www.cplusplus.com/reference/stl/list/remove/" rel="nofollow">http://www.cplusplus.com/reference/stl/list/remove/</a>.<br />
Hier gibt es eine remove Methode, der man als Argument den zu löschenden Wert übergibt.<br />
Vorraussetzung ist dass dein Typ mit operator== verglichen werden kann, aber das benutzt du ja in deiner vector-Implementierung jetzt auch schon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935348</guid><dc:creator><![CDATA[Max3000]]></dc:creator><pubDate>Mon, 02 Aug 2010 21:05:44 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Mon, 02 Aug 2010 21:28:43 GMT]]></title><description><![CDATA[<p>Max3000 schrieb:</p>
<blockquote>
<p>Du willst quasi Elemente mit einem gewissen Wert aus deinem Vector löschen.<br />
Dazu ist die std::list meines Erachtens besser geeignet.</p>
</blockquote>
<p>Diese Logik verstehe ich nicht. Er hat einen vector und möchte Elemente da entfernen und du schlägst ihm eine std::list vor, ohne jeglichen Anhaltspunkt zu haben, wozu er den Container braucht..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935356</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 02 Aug 2010 21:28:43 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Mon, 02 Aug 2010 21:29:00 GMT]]></title><description><![CDATA[<p>Max3000 schrieb:</p>
<blockquote>
<p>Du willst quasi Elemente mit einem gewissen Wert aus deinem Vector löschen.<br />
Dazu ist die std::list meines Erachtens besser geeignet.</p>
</blockquote>
<p>So pauschal würde ich das nicht sagen. Vielleicht will man ja Random Access, oder vielleicht hat man viele kleine Objekte, für die sich einzelne Allokationen nicht lohnen. Durchiterieren und löschen geht für beide Container in O(n), ein Objekt über einen Iterator zu entfernen in O(1), wenn die Reihenfolge unwichtig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935357</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 02 Aug 2010 21:29:00 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Tue, 03 Aug 2010 06:28:06 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Max3000 schrieb:</p>
<blockquote>
<p>Du willst quasi Elemente mit einem gewissen Wert aus deinem Vector löschen.<br />
Dazu ist die std::list meines Erachtens besser geeignet.</p>
</blockquote>
<p>Diese Logik verstehe ich nicht. Er hat einen vector und möchte Elemente da entfernen und du schlägst ihm eine std::list vor, ohne jeglichen Anhaltspunkt zu haben, wozu er den Container braucht..</p>
</blockquote>
<p>Der Anhaltspunkt ist, dass er Elemente mit einem gewissen Wert aus der Liste/Vector löschen will. Im Endeffekt ist doch beides eh fast das gleiche. Kommt jetzt nur noch drauf an was der Container sonst noch bringen muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935436</guid><dc:creator><![CDATA[Max3000]]></dc:creator><pubDate>Tue, 03 Aug 2010 06:28:06 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Tue, 03 Aug 2010 08:45:26 GMT]]></title><description><![CDATA[<p>Hey danke für die vielen Antworten! <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="😃"
    /><br />
Ich weiß jetzt, wie ich es machen muss!</p>
<p>Viele Grüße<br />
Paul</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935482</guid><dc:creator><![CDATA[paulrei]]></dc:creator><pubDate>Tue, 03 Aug 2010 08:45:26 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Tue, 03 Aug 2010 09:21:56 GMT]]></title><description><![CDATA[<p>Ich versteh das nicht...<br />
Die Fehlermeldung kommt immer noch! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
Der Debugger zeigt aber, dass es jetzt nicht mehr an der Funktion liegt. <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="😃"
    /><br />
Ich werde mir die Codestruktur wohl nochmal selber anschauen und euch nicht mit den hundert Zeilen Code im Stich lassen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Wenn ihr es wissen wollt:<br />
Ich will ein Timer-Objekt proggen, das einen windows.h-SetTimer() - Funktion aufruft. In einem statischen TimerProc() wird ein Vektor voll Funktiospointern aufgerufen, die jeweils einen Timer vertreten und im Falle eines Ticks ihre Aufgabe ausführen. Der Pointer muss aber im Destruktor auch wieder gelöscht werden, wobei das Programm immer einen schwerwiegenden Fehler im preincrement-operator von vector ausgibt... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Ich bin euch trotzdem sehr dankbar für eure Lösungsvorschläge. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935505</guid><dc:creator><![CDATA[paulrei]]></dc:creator><pubDate>Tue, 03 Aug 2010 09:21:56 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Tue, 03 Aug 2010 17:28:09 GMT]]></title><description><![CDATA[<p>Max3000 schrieb:</p>
<blockquote>
<p>Der Anhaltspunkt ist, dass er Elemente mit einem gewissen Wert aus der Liste/Vector löschen will.</p>
</blockquote>
<p>Er will sie aus dem Vector löschen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Max3000 schrieb:</p>
<blockquote>
<p>Im Endeffekt ist doch beides eh fast das gleiche. Kommt jetzt nur noch drauf an was der Container sonst noch bringen muss.</p>
</blockquote>
<p>Ja, und genau deswegen kannst du nicht sagen, dass eine Liste besser geeignet wäre. Allein an den Anforderungen hier erkenne ich keinen signifikanten Vorteil.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935718</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 03 Aug 2010 17:28:09 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Wed, 04 Aug 2010 07:26:12 GMT]]></title><description><![CDATA[<p>Ich meinte ja nur dass die Liste eine Funktion bereitstellt mit der man Elemente durch Angabe ihres Wertes löschen kann und sich so eine Schleife mit elementweise Vergleichen spart.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935902</guid><dc:creator><![CDATA[Max3000]]></dc:creator><pubDate>Wed, 04 Aug 2010 07:26:12 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Wed, 04 Aug 2010 07:30:41 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Statt ineffizienten Code mit O(n^2) Laufzeit zu schreiben[...]</p>
</blockquote>
<p>Nur mal so als Frage: Wieso O(n<sup>2</sup>)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935903</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 04 Aug 2010 07:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Wed, 04 Aug 2010 07:47:55 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Statt ineffizienten Code mit O(n^2) Laufzeit zu schreiben[...]</p>
</blockquote>
<p>Nur mal so als Frage: Wieso O(n<sup>2</sup>)?</p>
</blockquote>
<p>...weil die Elemente jedes Mal alle um eins im Vektor nachrücken müssen, wenn Du ein einziges Element aus der Mitte löschst. Die idiomatische Lösung habe ich hier leider noch nicht gesehen, obwohl sie angedeutet worden ist:</p>
<pre><code class="language-cpp">meinvektor.erase(
  std::remove(meinvektor.begin(),meinvektor.end(),zuLoeschen),
  meinvektor.end() );
</code></pre>
<p>Dies ist bekannt unter dem Namen &quot;Erase-Remove Idiom&quot;.</p>
<p>BTW: In den folgenden Video-Lectures wird dieses Idiom auch angesprochen und sogar genau mit Illustrationen erklärt, warum das eine O(n^2) und das andere O(n) hat:<br />
<a href="http://blogs.msdn.com/b/vcblog/archive/2010/07/02/video-introduction-to-the-stl-part-1.aspx" rel="nofollow">Introduction to the STL, Part 1</a><br />
<a href="http://blogs.msdn.com/b/vcblog/archive/2010/07/22/video-introduction-to-the-stl-part-2.aspx" rel="nofollow">Introduction to the STL, Part 2</a></p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935918</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 04 Aug 2010 07:47:55 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Wed, 04 Aug 2010 07:50:11 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>[...]Dies ist bekannt unter dem Namen &quot;Erase-Remove Idiom&quot;.[...]</p>
</blockquote>
<p>Aber das hätte dann ja auch O(n<sup>2</sup>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935919</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 04 Aug 2010 07:50:11 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Wed, 04 Aug 2010 08:08:01 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>[...]Dies ist bekannt unter dem Namen &quot;Erase-Remove Idiom&quot;.[...]</p>
</blockquote>
<p>Aber das hätte dann ja auch O(n<sup>2</sup>).</p>
</blockquote>
<p>Nein. Hat es nicht.</p>
<p>Und wer die Stelle in den Videos nachgucken will: Part 2 bei 35 Minuten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935938</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 04 Aug 2010 08:08:01 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector: element löschen - debug assertion failed! on Wed, 04 Aug 2010 08:24:56 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>[...]Dies ist bekannt unter dem Namen &quot;Erase-Remove Idiom&quot;.[...]</p>
</blockquote>
<p>Aber das hätte dann ja auch O(n<sup>2</sup>).</p>
</blockquote>
<p>Nein. Hat es nicht.</p>
<p>Und wer die Stelle in den Videos nachgucken will: Part 2 bei 35 Minuten</p>
</blockquote>
<p>Stimmt, das hat Sinn. Danke für die Info. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935946</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 04 Aug 2010 08:24:56 GMT</pubDate></item></channel></rss>