<?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[STL erase funktioniert nicht]]></title><description><![CDATA[<p>Hey,</p>
<p>ich bin gerade dabei, von einem Tracker mir immer Listen zu holen, die Informationen über Spieleserver enthalten.</p>
<p>Die Listen sind beide vom Typ &quot;d3server&quot;. Diese struct ist gegliedert in Servername, Missionsname ... etc.</p>
<p>Ich hole mir alle 60 Sekunden die Liste erneut vom Server, wobei ich sie vorher auf die 2te Liste kopiere. Dann will ich die beiden Listen vergleichen.</p>
<p>Beispiel: Ein Server hat geschlossen - dadurch geht das Programm durch diesen Code:</p>
<pre><code class="language-cpp">for(list&lt;d3server&gt;::iterator old_itr = servers.begin(); old_itr != servers.end(); old_itr++)
			{
				for(list&lt;d3server&gt;::iterator itr = srv_list.begin(); itr != srv_list.end(); itr++)
				{
					if(old_itr-&gt;sname == itr-&gt;sname)
					{
						cout &lt;&lt; &quot;FOUND A MATCH!&quot; &lt;&lt; endl;

						itr=servers.erase(itr);

						cout &lt;&lt; servers.size() &lt;&lt; endl;

						break;
					}
				}
			}
</code></pre>
<p>Jedesmal, wenn sich 2 Server gleichen, werden sie aus der Liste gestrichen - und zwar so lange, bis nur noch der Server übrig ist, der gerade zugemacht hat.</p>
<p>Die Liste &quot;srv_list&quot; ist die aktuelle, ohne den geschlossenen Server, die Liste &quot;servers&quot; enthält noch alle Server von vor 60 Sekunden (also auch den geschlossenen).</p>
<p>Im Prinzip würde das ganze wunderbar funktionieren, aber STL macht mir einen Strich durch die Rechnung - denn das &quot;itr=servers.erase(itr);&quot; (Zeile 9) funktioniert nicht! Die cout-Ausgabe liefert nach wie vor die selbe Größe, und die Einträge sind immernoch vorhanden.</p>
<p>Ich denke mal, dass es sich hierbei um einen kleinen Denkfehler handelt. Ich hoffe, ihr könnt mir helfen!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230135/stl-erase-funktioniert-nicht</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 11:08:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230135.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Dec 2008 13:16:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL erase funktioniert nicht on Sun, 21 Dec 2008 13:16:28 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>ich bin gerade dabei, von einem Tracker mir immer Listen zu holen, die Informationen über Spieleserver enthalten.</p>
<p>Die Listen sind beide vom Typ &quot;d3server&quot;. Diese struct ist gegliedert in Servername, Missionsname ... etc.</p>
<p>Ich hole mir alle 60 Sekunden die Liste erneut vom Server, wobei ich sie vorher auf die 2te Liste kopiere. Dann will ich die beiden Listen vergleichen.</p>
<p>Beispiel: Ein Server hat geschlossen - dadurch geht das Programm durch diesen Code:</p>
<pre><code class="language-cpp">for(list&lt;d3server&gt;::iterator old_itr = servers.begin(); old_itr != servers.end(); old_itr++)
			{
				for(list&lt;d3server&gt;::iterator itr = srv_list.begin(); itr != srv_list.end(); itr++)
				{
					if(old_itr-&gt;sname == itr-&gt;sname)
					{
						cout &lt;&lt; &quot;FOUND A MATCH!&quot; &lt;&lt; endl;

						itr=servers.erase(itr);

						cout &lt;&lt; servers.size() &lt;&lt; endl;

						break;
					}
				}
			}
</code></pre>
<p>Jedesmal, wenn sich 2 Server gleichen, werden sie aus der Liste gestrichen - und zwar so lange, bis nur noch der Server übrig ist, der gerade zugemacht hat.</p>
<p>Die Liste &quot;srv_list&quot; ist die aktuelle, ohne den geschlossenen Server, die Liste &quot;servers&quot; enthält noch alle Server von vor 60 Sekunden (also auch den geschlossenen).</p>
<p>Im Prinzip würde das ganze wunderbar funktionieren, aber STL macht mir einen Strich durch die Rechnung - denn das &quot;itr=servers.erase(itr);&quot; (Zeile 9) funktioniert nicht! Die cout-Ausgabe liefert nach wie vor die selbe Größe, und die Einträge sind immernoch vorhanden.</p>
<p>Ich denke mal, dass es sich hierbei um einen kleinen Denkfehler handelt. Ich hoffe, ihr könnt mir helfen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633560</guid><dc:creator><![CDATA[ChocoHopper]]></dc:creator><pubDate>Sun, 21 Dec 2008 13:16:28 GMT</pubDate></item><item><title><![CDATA[Reply to STL erase funktioniert nicht on Sun, 21 Dec 2008 13:33:32 GMT]]></title><description><![CDATA[<p><code>itr</code> iteriert doch über <code>srv_list</code> und nicht über <code>servers</code> , oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633567</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 21 Dec 2008 13:33:32 GMT</pubDate></item><item><title><![CDATA[Reply to STL erase funktioniert nicht on Sun, 21 Dec 2008 13:38:59 GMT]]></title><description><![CDATA[<p>Ich weiss jetzt nicht, wo dein Fehler ist, da erase grundsätzlich funktioniert. <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="😉"
    /><br />
Probier ansonsten einfach einmal ein einfaches Probe Beispiel zu Testzwecken zu schreiben und dann den Unterschied zu deiner Version zu finden.</p>
<p>Im übrigen bist du sicher, dass sich die Grösse bestimmt nicht ändert, oder nur einen Wert hat, den du als falsch empfindest? - Geh da sonst auch mal mit dem Debugger durch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633569</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 21 Dec 2008 13:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to STL erase funktioniert nicht on Sun, 21 Dec 2008 13:47:01 GMT]]></title><description><![CDATA[<p>Wie ich bereits sagte, liegt das Problem darin, dass der zu löschende Iterator zum falschen Container gehört. <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>
<p>Sollte eigentlich im Debug-Modus in einer Assertion enden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633570</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 21 Dec 2008 13:47:01 GMT</pubDate></item><item><title><![CDATA[Reply to STL erase funktioniert nicht on Sun, 21 Dec 2008 13:49:33 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wie ich bereits sagte, liegt das Problem darin, dass der zu löschende Iterator zum falschen Container gehört. <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>
<p>Sollte eigentlich im Debug-Modus in einer Assertion enden...</p>
</blockquote>
<p>Jop. Aber das hätte er auch selbst finden könne, wenn er mit dem Debuger das ganze ganz genau angeschaut hätte. <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>
<p>Ich habe mir das gar nicht angeschaut, ob der Iterator stimmt.:)<br />
Wundert mich aber auch, dass es da keinen Crash gegeben hat.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633572</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 21 Dec 2008 13:49:33 GMT</pubDate></item><item><title><![CDATA[Reply to STL erase funktioniert nicht on Sun, 21 Dec 2008 14:21:38 GMT]]></title><description><![CDATA[<p>Ah, genau das war's! Danke!</p>
<p>Leider hat mir weder GDB noch Valgrind dazu was ausgegeben <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=":-/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633585</guid><dc:creator><![CDATA[ChocoHopper]]></dc:creator><pubDate>Sun, 21 Dec 2008 14:21:38 GMT</pubDate></item><item><title><![CDATA[Reply to STL erase funktioniert nicht on Sun, 21 Dec 2008 14:52:06 GMT]]></title><description><![CDATA[<p>ChocoHopper schrieb:</p>
<blockquote>
<p>Leider hat mir weder GDB noch Valgrind dazu was ausgegeben <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=":-/"
      alt="😕"
    /></p>
</blockquote>
<p>Das wäre aber auch Aufgabe deiner STL-Implementierung, diesen Fehler zu melden (Assertion). Hast du denn im Debug-Modus kompiliert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633604</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 21 Dec 2008 14:52:06 GMT</pubDate></item></channel></rss>