<?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[vector: erase + Einfügen in Schleife?]]></title><description><![CDATA[<p>Hi,</p>
<p>habe wieder so eine Anfängerfrage. Also ich durchlaufe meinen vector gerade und finde dort ein Element vor. Dieses würde ich gerne splitten, sprich das eine löschen und zwei neue einfügen.</p>
<p>Problem: kriege ich irgendwie garantiert, dass mein iterator dann noch gültig ist ohne dass ich mir den Wert merke und nach dem push_back suche? Ich könnte natürlich auch über einen Zähler iterieren, der würde in jedem Fall funktionieren, aber dann muss ich jedes Mal vorm Löschen daraus einen iterator generieren. <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>
<p>Edit:<br />
Ich könnte vor dem Durchlauf den vector auf das doppelte seiner aktuellen Größe reservern, da ich nach dem Durchlauf nie mehr als N*2 Elemente enthalten habe. Würde das garantieren, dass push_back kein Resizing macht und Iteratoren daher erhalten bleiben?</p>
<p>Ideen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/300422/vector-erase-einfügen-in-schleife</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 20:21:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/300422.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Mar 2012 11:35:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 11:37:02 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>habe wieder so eine Anfängerfrage. Also ich durchlaufe meinen vector gerade und finde dort ein Element vor. Dieses würde ich gerne splitten, sprich das eine löschen und zwei neue einfügen.</p>
<p>Problem: kriege ich irgendwie garantiert, dass mein iterator dann noch gültig ist ohne dass ich mir den Wert merke und nach dem push_back suche? Ich könnte natürlich auch über einen Zähler iterieren, der würde in jedem Fall funktionieren, aber dann muss ich jedes Mal vorm Löschen daraus einen iterator generieren. <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>
<p>Edit:<br />
Ich könnte vor dem Durchlauf den vector auf das doppelte seiner aktuellen Größe reservern, da ich nach dem Durchlauf nie mehr als N*2 Elemente enthalten habe. Würde das garantieren, dass push_back kein Resizing macht und Iteratoren daher erhalten bleiben?</p>
<p>Ideen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2187943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187943</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 03 Mar 2012 11:37:02 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 11:37:21 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">iter = v.erase(iter);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2187944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187944</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 03 Mar 2012 11:37:21 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 11:42:07 GMT]]></title><description><![CDATA[<p>Ja, erase krieg ich hin, es geht um push_back.</p>
<p>Edit:<br />
Puh, wenn es keine triviale Lösung gibt, werd ich wohl einfach einen Zweitvector nutzen, da alle neuen Elemente einfügen und die vectors später zusammenfügen. Die neu erstellten Elemente erfordern nämlich eigentlich gar keine Iteration mehr... elegant lässt sich Obiges nicht lösen? Vielleicht ist vector auch der falsche Container?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2187946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187946</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 03 Mar 2012 11:42:07 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 11:43:31 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Edit:<br />
Ich könnte vor dem Durchlauf den vector auf das doppelte seiner aktuellen Größe reservern, da ich nach dem Durchlauf nie mehr als N*2 Elemente enthalten habe. Würde das garantieren, dass push_back kein Resizing macht und Iteratoren daher erhalten bleiben?</p>
</blockquote>
<p>Wenn die capacity des vectors groß genug für die Einfügeaktion ist, ist dir garantiert, dass push_back die Iteratoren gültig lässt.</p>
<p>Eisflamme schrieb:</p>
<blockquote>
<p>Edit:<br />
Puh, wenn es keine triviale Lösung gibt, werd ich wohl einfach einen Zweitvector nutzen, da alle neuen Elemente einfügen und die vectors später zusammenfügen. Die neu erstellten Elemente erfordern nämlich eigentlich gar keine Iteration mehr... elegant lässt sich Obiges nicht lösen? Vielleicht ist vector auch der falsche Container?</p>
</blockquote>
<p>Wie immer die Frage: Was soll es werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2187947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187947</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 03 Mar 2012 11:43:31 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 11:46:10 GMT]]></title><description><![CDATA[<p>Es geht um einen Stringparser. Der String enthält kommaseparierte Ausdrücke, die unabhängig voneinander sind. Deswegen splitte ich den String erst nach ',' und füge alle Elemente in einen vector ein und validiere dann jedes einzelne Element.</p>
<p>Ungültige Elemente werden gelöscht, manche sind aber auch einfach nur ungünstig/unkonventionell geschrieben, diese werden geändert. Und manchmal schreibt man etwas abgekürzt, dann werden aus einem Element eben zwei Elemente. Später wird der vector wieder in einen kommaseparierten String umgewandelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2187949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187949</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 03 Mar 2012 11:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 11:56:01 GMT]]></title><description><![CDATA[<p>Also wenn ich das richtig sehe, machst du folgendes:</p>
<ol>
<li>String zerpflücken und nach vector kopieren.</li>
<li>vector validieren und geänderte Dinge wieder in vector stopfen.</li>
<li>vector-Teile in String kopieren.</li>
</ol>
<p>Warum so umständlich? Den vector (oder die vectoren) brauchst du dabei doch garnicht:</p>
<ol>
<li>Nimm dir nacheinander jeden der kommaseparierten Substrings</li>
<li>Jage ihn durch deinen Validator/Parser</li>
<li>Schmeiße das oder die Ergebnisse direkt in den Ergebnis-String, jeweils gefolgt von einem Komma</li>
</ol>
<p>Keine zwischendurch-Vectoren nötig.<br />
Oder hast du wichtige Details ausgelassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2187952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187952</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 03 Mar 2012 11:56:01 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 11:58:23 GMT]]></title><description><![CDATA[<p>Gibt es einen tieferen Grund, warum du<br />
1. die abgeänderten Tokens auch noch indem vector zwischenspeicherst, anstatt sie direkt in die Zieldatenstruktur einzufügen? Ein Grund dafür könnten Abhängigkeiten zwischen den Tokens sein, die einen Zugriff auf bereits verarbeitete Tokens nötig machen oder die Notwendigkeit, später immer noch Zugriff auf die Tokens zu haben. Deine Beschreibung klingt aber tendenziell eher so, als wäre beides nicht der Fall.<br />
2. die Tokens in dem Vector zwischenspeicherst, anstatt sie direkt zu ändern und in die Zieldatenstruktur einzufügen? Mögliche Gründe wären wie oben.</p>
<p>edit: Da war pumuckl mit der gleichen Idee schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2187953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187953</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 03 Mar 2012 11:58:23 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 12:47:40 GMT]]></title><description><![CDATA[<p>Hm, stimmt, das könnte ich umstellen. Ich fand's halt spontan angenehmer mit einem vector zu arbeiten. Es kann auch sein, dass die Überprüfung ergibt, dass nichts geändert werden muss. Dann würde ich quasi umsonst alles von String1 nach String2 schieben. Aber der Aufwand ist wohl vernachlässigbar, wenn die Überprüfung sowieso stattfindet. <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>Edit: Oh, jetzt fällt mir doch noch ein, wieso das gut ist. Ich will die Teile später noch sortieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2187960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187960</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 03 Mar 2012 12:47:40 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 14:10:42 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>ohne dass ich mir den Wert merke und nach dem push_back suche?</p>
</blockquote>
<p>Ich verstehe die Frage nicht. Nach push_back steht das neue Element an letzter Stelle. Wofür suchen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2187980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2187980</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 03 Mar 2012 14:10:42 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 14:58:53 GMT]]></title><description><![CDATA[<p>Wenn der iterator nicht mehr gültig ist, muss ich ihn reproduzieren und wenn ich nicht am Anfang anfangen will, muss ich den eben über eine Suche finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188004</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 03 Mar 2012 14:58:53 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 15:45:59 GMT]]></title><description><![CDATA[<p>Wie wäre es mit Indizes, wenn du einen vector hast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188020</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 03 Mar 2012 15:45:59 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 19:26:45 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Wenn der iterator nicht mehr gültig ist, muss ich ihn reproduzieren und wenn ich nicht am Anfang anfangen will, muss ich den eben über eine Suche finden.</p>
</blockquote>
<p>Was heißt reproduzieren? Nicht am Anfang anfangen, sondern suchen? Du redest in Rätseln. Ich seh selbst für den Fall, dass du nächträglich Iteratoren für alle neu eingefügten Elemente haben willst, keinen Bedarf für Suchen, weil die Elemente alle ab einer bestimmten Stelle hintereinander im Container stehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188097</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 03 Mar 2012 19:26:45 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sat, 03 Mar 2012 21:01:08 GMT]]></title><description><![CDATA[<p>Michael:<br />
Wenn ich push_back mache ist mein aktueller iterator ungültig. Ich iteriere durch die ganze Schleife aber via iterator. Also muss ich, damit ich an derselben Stelle weiterlaufen kann wie vorher, ja irgendwie an besagte Stelle kommen.</p>
<p>SeppJ:<br />
Ja, das ginge. Hatte ganz übersehen, dass ich ja swap-erasen kann. Ohne das wäre es umständlich geworden das Element an der entsprechenden Indexstelle zu löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188121</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 03 Mar 2012 21:01:08 GMT</pubDate></item><item><title><![CDATA[Reply to vector: erase + Einfügen in Schleife? on Sun, 04 Mar 2012 09:10:17 GMT]]></title><description><![CDATA[<p>Wenn ich dich recht verstanden habe, möchtest du den Behälter doch bloß zum sortieren. Warum dann kein (multi-)set? Und das Iterieren sparst du dir ganz, so wie ich und pumuckl es weiter oben schon vorgeschlagen haben. Also Pseudocode:</p>
<pre><code class="language-cpp">while(getline(quelle, zeile, ','))
 verarbeite_zeile_und_füge_ergebnis_dem_set_hinzu(zeile, das_set);
for(alle set_elemente)
 schreibe_raus(ziel, set_element);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2188212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188212</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 04 Mar 2012 09:10:17 GMT</pubDate></item></channel></rss>