<?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[Element aus Map löschen]]></title><description><![CDATA[<p>Hallo, ich habe eine Map, aus der ich ein Element mit value param lösche:</p>
<pre><code class="language-cpp">Foo::iterator it       = mFoos.begin();
	FooMap::iterator itEnd = mFoos.end();
	for(; it != itEnd; ++it) {
		if(it-&gt;second == param) {
			mFoos.erase(it);
			break;
		}
	}

	assert( (it != itEnd)  );
</code></pre>
<p>Am Ende prüfe ich mit assert, ob das Element auch wirklich gefunden wurde. Seltsamerweise springt dieses assert() jedauch auch dann an, WENN das Element gelöscht wurde. Ich kriege dann ein Assert mit:</p>
<blockquote>
<p>Expression: map/set iterators incompatible</p>
</blockquote>
<p>Was bedeutet das? Wieso kriege ich da immer ein assert?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287477/element-aus-map-löschen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 10:25:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287477.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 May 2011 14:16:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 14:16:30 GMT]]></title><description><![CDATA[<p>Hallo, ich habe eine Map, aus der ich ein Element mit value param lösche:</p>
<pre><code class="language-cpp">Foo::iterator it       = mFoos.begin();
	FooMap::iterator itEnd = mFoos.end();
	for(; it != itEnd; ++it) {
		if(it-&gt;second == param) {
			mFoos.erase(it);
			break;
		}
	}

	assert( (it != itEnd)  );
</code></pre>
<p>Am Ende prüfe ich mit assert, ob das Element auch wirklich gefunden wurde. Seltsamerweise springt dieses assert() jedauch auch dann an, WENN das Element gelöscht wurde. Ich kriege dann ein Assert mit:</p>
<blockquote>
<p>Expression: map/set iterators incompatible</p>
</blockquote>
<p>Was bedeutet das? Wieso kriege ich da immer ein assert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070505</guid><dc:creator><![CDATA[assertFrage22]]></dc:creator><pubDate>Sun, 29 May 2011 14:16:30 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 15:04:34 GMT]]></title><description><![CDATA[<p>der iterator wird doch dann ungültig wenn du ihn löschst...<br />
dann kannst du den nicht mehr auf gleichheit mit anderen prüfen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070533</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 29 May 2011 15:04:34 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 16:47:21 GMT]]></title><description><![CDATA[<p>es gibt eine Funktion, die genau das tut, was du mit deiner Schleife zu erreichen versuchst. map::erase hat nämlich eine Überladung mit dem key-type:</p>
<pre><code class="language-cpp">myMap.erase(param);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2070580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070580</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sun, 29 May 2011 16:47:21 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 17:51:07 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>es gibt eine Funktion, die genau das tut, was du mit deiner Schleife zu erreichen versuchst. map::erase hat nämlich eine Überladung mit dem key-type:</p>
<pre><code class="language-cpp">myMap.erase(param);
</code></pre>
</blockquote>
<p>Ich lösche aber nach dem Value und nicht nach dem Key^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070605</guid><dc:creator><![CDATA[assertFrage22]]></dc:creator><pubDate>Sun, 29 May 2011 17:51:07 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 18:01:37 GMT]]></title><description><![CDATA[<p>hab im internet irgendwo gefunden, dass man in solchen fällend en iterator nach dem löschen inkrementieren soll<br />
dann ist der wieder gültig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070610</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 29 May 2011 18:01:37 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 18:08:36 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>hab im internet irgendwo gefunden, dass man in solchen fällend en iterator nach dem löschen inkrementieren soll<br />
dann ist der wieder gültig</p>
</blockquote>
<p>Nein, einen ungültigen Iterator kann man nicht inkrementieren. <code>erase</code> gibt einen Iterator zurück, der hinter das gelöschte Element zeigt, mit diesem kann man dann weiter verfahren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070615</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sun, 29 May 2011 18:08:36 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 18:40:07 GMT]]></title><description><![CDATA[<p>Also kann man mit einem ungültigen Iterator GARNIX mehr machen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070633</guid><dc:creator><![CDATA[assertFrage22]]></dc:creator><pubDate>Sun, 29 May 2011 18:40:07 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 18:42:30 GMT]]></title><description><![CDATA[<p>also drauf zugreifen und dereferenzieren kann man nicht, wie denn auch wenn der ins nichts zeigt...<br />
aber inkrementieren und dekrementieren müsste er können</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070634</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 29 May 2011 18:42:30 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 18:46:16 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>aber inkrementieren und dekrementieren müsste er können</p>
</blockquote>
<p>Das dürfte genauso in die Hose gehen wie selber dereferenzieren - die meisten Iteratoren basieren auf Zeigern in die interne Container-Repräsentation und wenn das Element, auf das sie mal gezeigt haben, nicht mehr existiert, dann sind idR auch die Verwaltungsdaten weg an denen du dich durchhangeln willst.<br />
Das einzige, was du mit einem ungültigen Iterator noch machen kannst, ist ihn wegzuschmeißen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070635</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 29 May 2011 18:46:16 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 19:07:54 GMT]]></title><description><![CDATA[<p>Man kann ihm einen Anderen zuweisen:</p>
<pre><code class="language-cpp">BrokenIter = ValidIter;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2070647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070647</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 29 May 2011 19:07:54 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 19:22:15 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Man kann ihm einen Anderen zuweisen:</p>
<pre><code class="language-cpp">BrokenIter = ValidIter;
</code></pre>
</blockquote>
<p>xD</p>
<p>nein aber man könnte den iterator kopieren und dann vor dem erasen noch de- oder inkrementieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070652</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 29 May 2011 19:22:15 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 19:30:17 GMT]]></title><description><![CDATA[<p>Ja, das wäre möglich, solange du es <strong>vor</strong> dem Löschen machst (und solange du mit einem knotenbasierten Container arbeitest - auf einem vector&lt;&gt; oder deque&lt;&gt; geht das Vorhaben vermutlich in die Hose).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070656</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 29 May 2011 19:30:17 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 20:46:57 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">map.erase(it++);
</code></pre>
<p>Aber darauf achten, dass man den Iterator nicht noch zusätzlich inkrementiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070704</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 29 May 2011 20:46:57 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 22:31:47 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<pre><code class="language-cpp">map.erase(it++);
</code></pre>
<p>Aber darauf achten, dass man den Iterator nicht noch zusätzlich inkrementiert.</p>
</blockquote>
<p>Uahh, da hat jemand seinen Zauberstab ausgepackt. Sowas macht Code finde ich leicht unlesbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070743</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 29 May 2011 22:31:47 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 22:38:37 GMT]]></title><description><![CDATA[<p>Gar nicht. Du hast ne Code-lese-Schwäche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070747</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 29 May 2011 22:38:37 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Sun, 29 May 2011 22:52:30 GMT]]></title><description><![CDATA[<p>TravisG schrieb:</p>
<blockquote>
<p>Uahh, da hat jemand seinen Zauberstab ausgepackt. Sowas macht Code finde ich leicht unlesbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Du kannst auch gerne das lesbarere</p>
<pre><code class="language-cpp">std::map&lt;K, V&gt;::iterator tmp = it;
++tmp;
map.erase(it);
it = tmp;
</code></pre>
<p>verwenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070749</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 29 May 2011 22:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Mon, 30 May 2011 04:48:41 GMT]]></title><description><![CDATA[<p>Ich kann den Code klar lesen, es sieht fuer mich nur merkwuerdig aus. Nenne es Eitelkeit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Nexus schrieb:</p>
<blockquote>
<p>TravisG schrieb:</p>
<blockquote>
<p>Uahh, da hat jemand seinen Zauberstab ausgepackt. Sowas macht Code finde ich leicht unlesbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Du kannst auch gerne das lesbarere</p>
<pre><code class="language-cpp">std::map&lt;K, V&gt;::iterator tmp = it;
++tmp;
map.erase(it);
it = tmp;
</code></pre>
<p>verwenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Nein, ich wuerde schon deine Art bevorzugen. Waere eins dieser coolen Zauberstab-Dinge, die den Code schneller &amp; kuerzer machen, und zusaetzlich den ein oder anderen verwirren koennten, wo man dann ein klein wenig Stolz ist (auch wenn mans nicht zugeben will), wenn man's einer Person erklaeren muss. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070761</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 30 May 2011 04:48:41 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Mon, 30 May 2011 08:34:41 GMT]]></title><description><![CDATA[<p>TravisG schrieb:</p>
<blockquote>
<p>und zusaetzlich den ein oder anderen verwirren koennten, wo man dann ein klein wenig Stolz ist (auch wenn mans nicht zugeben will), wenn man's einer Person erklaeren muss. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Wenn man Stolz ist, weil man jemandem seinen Code erklären muss, hat man Mist gebaut. Code sollte zuallererst so aussehen, dass jeder, der wahrscheinlich damit in Verbindung kommt, ihn auch lesen kann. Wenn dein Code von Anfängern verstanden werden muss, dann gestalte ihn auch so, dass ein Anfänger ihn versteht - entweder durch klare Struktur oder durch genügend Kommentare. Kurzer, unlesbarer Code ist nicht cool sondern dumm und eine Fehlerquelle, wenn er gewartet werden soll.</p>
<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Man kann ihm einen Anderen zuweisen:</p>
<pre><code class="language-cpp">BrokenIter = ValidIter;
</code></pre>
</blockquote>
<p>Kann man, nur braucht man dazu einen gültigen Iterator.</p>
<p>Skym0sh0  schrieb:</p>
<blockquote>
<p>nein aber man könnte den iterator kopieren und dann vor dem erasen noch de- oder inkrementieren</p>
</blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Ja, das wäre möglich, solange du es <strong>vor</strong> dem Löschen machst (und solange du mit einem knotenbasierten Container arbeitest - auf einem vector&lt;&gt; oder deque&lt;&gt; geht das Vorhaben vermutlich in die Hose).</p>
</blockquote>
<p>Dekrementieren geht auch bei vector. erase invalidiert dort nur Iteratoren nach dem gelöschten Element.</p>
<p>Nexus schrieb:</p>
<blockquote>
<pre><code class="language-cpp">map.erase(it++);
</code></pre>
<p>Aber darauf achten, dass man den Iterator nicht noch zusätzlich inkrementiert.</p>
</blockquote>
<p>Deshalb im Normalfall lieber dekrementieren. Der Inkrement für den nächsten Schleifendurchlauf setzt den Iterator dann wieder genau richtig. Da hier aber direkt danach break aufgerufen wird, ist it++ richtig.</p>
<p>Das assert am Ende ist aber dennoch falsch. Wenn das zu entfernende Element das letzte war, steht it nach dem Inkrement auf end() und das assert schlägt fälschlicherweise an. Das kann man auch nicht fixen, denn wenn die Map nur das eine zu löschende Element enthält, ist der end-Iterator hinterher der einzige mögliche iterator in die Map (weil identisch mit dem begin-Iterator). Ein assert, das sich nur auf Iteratoren stützt, kann hier also nicht zuverlässig funktionieren. Du müsstest also entweder vorher und hinterher die size() vergleichen, oder einen Algorithmus benutzen:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;

/* ... */

  FooMap::iterator it = std::find_if(mFoos.begin(), mFoos.end(),
        //C++0x-Lambda als Praedikat, alternativ functor benutzen
        [&amp;](FooMap::::value_type const&amp; mapValue)
        {
          return mapValue.second == param;
        }
  );

  assert( (it != mFoos.end())  );  //Vergleichen, solange it noch gueltig ist

  mFoos.erase(it);
</code></pre>
<p>Alternativ gäbe es für deinen Code noch eine etwas unschöne Krücke mit einer boolschen Variablen:</p>
<pre><code class="language-cpp">bool gefunden = false;
    Foo::iterator it       = mFoos.begin();
    FooMap::iterator itEnd = mFoos.end();
    for(; it != itEnd; ++it) {
        if(it-&gt;second == param) {
            mFoos.erase(it);
            gefunden = true;
            break;
        }
    }

    assert( gefunden );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2070828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070828</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 30 May 2011 08:34:41 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Mon, 30 May 2011 09:03:03 GMT]]></title><description><![CDATA[<p>Ich benutze jetzt die Variante mit dem bool. Finde ich garnicht unschoen, sondern maximal einfach.</p>
<p>Das haessliche Konstrukt mit [&amp;] sagt mir garnichts und ich verwende sowieso kein C++0x.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070845</guid><dc:creator><![CDATA[OP]]></dc:creator><pubDate>Mon, 30 May 2011 09:03:03 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Mon, 30 May 2011 09:39:05 GMT]]></title><description><![CDATA[<p>OP schrieb:</p>
<blockquote>
<p>Ich benutze jetzt die Variante mit dem bool. Finde ich garnicht unschoen, sondern maximal einfach.</p>
</blockquote>
<p>Ist vermutlich Geschmakssache, aber es ist ne Wegwerf-Variable. Ziemlich hässlich, finde ich.</p>
<blockquote>
<p>Das haessliche Konstrukt mit [&amp;] sagt mir garnichts und ich verwende sowieso kein C++0x.</p>
</blockquote>
<p>Das hässliche Konstrukt nennt sich Lambda-Ausdruck und wird dir künftig immer häufiger unterkommen. MSVC 2010 kanns schon, gcc 4.5.x auch. Ist halt künftig Standard und bietet einige Vorteile <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2070865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070865</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 30 May 2011 09:39:05 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Mon, 30 May 2011 09:45:50 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Ist halt künftig Standard und bietet einige Vorteile <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>
</blockquote>
<p>Du meinst die eh schon komplizierte C++ Syntax noch komplizieter machen? Ja, das haben sie geschafft;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070870</guid><dc:creator><![CDATA[OP]]></dc:creator><pubDate>Mon, 30 May 2011 09:45:50 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Mon, 30 May 2011 09:51:31 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Deshalb im Normalfall lieber dekrementieren. Der Inkrement für den nächsten Schleifendurchlauf setzt den Iterator dann wieder genau richtig. Da hier aber direkt danach break aufgerufen wird, ist it++ richtig.</p>
</blockquote>
<p>Dekrementieren finde ich nicht gut. Einerseits kanns beim <code>begin()</code> -Iterator ganz schön krachen, andererseits ist nichts tun besser als dekrementieren und wieder inkrementieren. Der Code ist klarer, wenn man einen <code>else</code> -Block und somit schön alle Fälle untereinander hat, als wenn man immer an das automatische <code>++it</code> im Schleifenkopf denken muss.</p>
<p>Und drittens kann man nicht immer dekrementieren, was vor allem bei <code>std::forward_list</code> aus C++0x relevant werden dürfte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070872</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 30 May 2011 09:51:31 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Mon, 30 May 2011 09:53:50 GMT]]></title><description><![CDATA[<p>OP schrieb:</p>
<blockquote>
<p>Du meinst die eh schon komplizierte C++ Syntax noch komplizieter machen? Ja, das haben sie geschafft;)</p>
</blockquote>
<p>Ich meine lokal neue Funktionen definieren können, on the fly neue Funktoren einbauen können, sämtliche algorithmen endlich kurz und knackig anwenden können, sattt vorher erst noch ungefüge Functor-structs einbauen zu müssen.<br />
Das Einzige, was man dafür an neuer Syntax lernen muss, ist die Closure-Syntax (das, was zwischen den eckigen Klammern steht), der Rest ist altbekannt.<br />
Und SO kompliziert ist es nun auch wieder nicht. Im Gegenteil, einiges an kompliziertem Wust hat der neue Standard schon entfernt.<br />
Dein [c]FooMap::iterator it[c] &amp; Co kommt künftig sogar selbst ohne typedef für die Map viel kürzer daher:</p>
<pre><code class="language-cpp">bool gefunden = false;
    auto itEnd = mFoos.end();
    for(auto it = mFoos.begin(); it != itEnd; ++it) {
        if(it-&gt;second == param) {
            mFoos.erase(it);
            gefunden = true;
            break;
        }
    }

    assert( gefunden );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2070874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070874</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 30 May 2011 09:53:50 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Mon, 30 May 2011 09:55:13 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Dekrementieren finde ich nicht gut.</p>
</blockquote>
<p>Stimmt, war ne blöde Idee...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070876</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 30 May 2011 09:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Mon, 30 May 2011 10:28:14 GMT]]></title><description><![CDATA[<p>Warum nicht so?</p>
<pre><code class="language-cpp">Foo::iterator it       = mFoos.begin();
	FooMap::iterator itEnd = mFoos.end();
	for(; it != itEnd; ++it) {
		if(it-&gt;second == param) {
			break;
		}
	}

	assert( (it != itEnd)  );
	mFoos.erase(it);
</code></pre>
<p>Ohne bool und ohne Lambda.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070891</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Mon, 30 May 2011 10:28:14 GMT</pubDate></item><item><title><![CDATA[Reply to Element aus Map löschen on Mon, 30 May 2011 11:33:23 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<p>Warum nicht so?</p>
<pre><code class="language-cpp">Foo::iterator it       = mFoos.begin();
	FooMap::iterator itEnd = mFoos.end();
	for(; it != itEnd; ++it) {
		if(it-&gt;second == param) {
			break;
		}
	}

	assert( (it != itEnd)  );
	mFoos.erase(it);
</code></pre>
<p>Ohne bool und ohne Lambda.</p>
</blockquote>
<p>Auch gut. Oder noch kürzer:</p>
<pre><code class="language-cpp">FooMap::iterator it       = mFoos.begin();
    FooMap::iterator itEnd = mFoos.end();
    while(it != itEnd &amp;&amp; it-&gt;second != param) 
        ++it;

    assert( (it != itEnd)  );
    mFoos.erase(it);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2070924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070924</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 30 May 2011 11:33:23 GMT</pubDate></item></channel></rss>