<?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[Verständnisfrage bzgl std::vector insert()]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich bastele gerade an einer Zwischenschicht einer grafischen Anzeige. Ich mache weder die eigentlich Anzeige noch die Datenbeschaffung, sondern lediglich die Vorbereitung für die Ausgabe.</p>
<p>Man stelle sich folgendes Diagramm vor:</p>
<pre><code>|
|
|
|    *
|    *     *           *
|    *     *     *     *     *   
|    *     *     *     *     *
-----|-----|-----|-----|-----|
  Fräs  Dreh  Putz  Pack  Post
</code></pre>
<p>Das Diagramm dient nur zur Verdeutlichung und ist frei erfunden.<br />
Hier wäre also beispielsweise &quot;Dauer pro Arbeitsschritt&quot; dargestellt.</p>
<p>Die Information &quot;Dauer pro Arbeitsschritt&quot; erhalte ich in einem Vektor von Arbeitsschritten, der dann einfach Element für Element im Diagramm dargestellt wird. Allerdings kann es sein, daß ein Schritt ausgelassen wird.</p>
<p>Ich muss also für ausgelassene Schritte einen Dummy einfügen.</p>
<p>Die FRAGE:</p>
<p>Fügt insert() &quot;an Position X&quot;, also &quot;vor dem Element, das gegenwärtig an Position X steht&quot; ein oder &quot;danach&quot;?</p>
<p>Die ZWEITE FRAGE:<br />
Angenommen, ich laufe mit einer Schleife</p>
<pre><code class="language-cpp">for (std::vector&lt;elem&gt;::iterator iter = vec.begin(); iter != vec.end(); ++iter)
</code></pre>
<p>über den Vektor.</p>
<p>Wenn die Einfügeoperation &quot;nach Element X&quot; einfügen würde, wäre alles kein Problem: Einfach insert aufrufen und mit dem zurückgegebenen Iterator weiter darüberlaufen.</p>
<p>Wenn jedoch insert() &quot;vor Element X&quot; einfügt, und ich eine Einfügeoperation &quot;dahinter&quot; wünsche, so muss ich den Iterator ein Element hochzählen, und dann die Einfügeoperation ausführen. Was passiert, wenn ich dabei vom letzten Element des Vektors ausgehe? Was passiert also, wenn ich einen Iterator, der auf das letzte Element zeigt, um eins erhöhe? Erhalte ich dann vec.end() (dann wäre alles in Ordnung) oder muss ich hier eine Sonderfallprüfung durchführen?</p>
<p>Danke im Voraus</p>
<p>Sid</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/166913/verständnisfrage-bzgl-std-vector-insert</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 15:24:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/166913.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 Dec 2006 12:26:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnisfrage bzgl std::vector insert() on Mon, 04 Dec 2006 12:26:12 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich bastele gerade an einer Zwischenschicht einer grafischen Anzeige. Ich mache weder die eigentlich Anzeige noch die Datenbeschaffung, sondern lediglich die Vorbereitung für die Ausgabe.</p>
<p>Man stelle sich folgendes Diagramm vor:</p>
<pre><code>|
|
|
|    *
|    *     *           *
|    *     *     *     *     *   
|    *     *     *     *     *
-----|-----|-----|-----|-----|
  Fräs  Dreh  Putz  Pack  Post
</code></pre>
<p>Das Diagramm dient nur zur Verdeutlichung und ist frei erfunden.<br />
Hier wäre also beispielsweise &quot;Dauer pro Arbeitsschritt&quot; dargestellt.</p>
<p>Die Information &quot;Dauer pro Arbeitsschritt&quot; erhalte ich in einem Vektor von Arbeitsschritten, der dann einfach Element für Element im Diagramm dargestellt wird. Allerdings kann es sein, daß ein Schritt ausgelassen wird.</p>
<p>Ich muss also für ausgelassene Schritte einen Dummy einfügen.</p>
<p>Die FRAGE:</p>
<p>Fügt insert() &quot;an Position X&quot;, also &quot;vor dem Element, das gegenwärtig an Position X steht&quot; ein oder &quot;danach&quot;?</p>
<p>Die ZWEITE FRAGE:<br />
Angenommen, ich laufe mit einer Schleife</p>
<pre><code class="language-cpp">for (std::vector&lt;elem&gt;::iterator iter = vec.begin(); iter != vec.end(); ++iter)
</code></pre>
<p>über den Vektor.</p>
<p>Wenn die Einfügeoperation &quot;nach Element X&quot; einfügen würde, wäre alles kein Problem: Einfach insert aufrufen und mit dem zurückgegebenen Iterator weiter darüberlaufen.</p>
<p>Wenn jedoch insert() &quot;vor Element X&quot; einfügt, und ich eine Einfügeoperation &quot;dahinter&quot; wünsche, so muss ich den Iterator ein Element hochzählen, und dann die Einfügeoperation ausführen. Was passiert, wenn ich dabei vom letzten Element des Vektors ausgehe? Was passiert also, wenn ich einen Iterator, der auf das letzte Element zeigt, um eins erhöhe? Erhalte ich dann vec.end() (dann wäre alles in Ordnung) oder muss ich hier eine Sonderfallprüfung durchführen?</p>
<p>Danke im Voraus</p>
<p>Sid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186791</guid><dc:creator><![CDATA[Sid2K6]]></dc:creator><pubDate>Mon, 04 Dec 2006 12:26:12 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage bzgl std::vector insert() on Mon, 04 Dec 2006 12:31:53 GMT]]></title><description><![CDATA[<p>vector::insert() fügt VOR der angegebenen Position ein (und gibt einen Iterator auf das neue Element zurück). Und erschwerend für deine Schleifenkonstruktion kommt noch dazu, daß die Operation alle Iteratoren im vector ungültig machen kann.</p>
<p>PS: Wenn du den Iterator auf das letzte Element erhöhst, landest du auf end()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186793</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 04 Dec 2006 12:31:53 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage bzgl std::vector insert() on Mon, 04 Dec 2006 12:35:06 GMT]]></title><description><![CDATA[<p>Hallo CStoll,</p>
<p>das insert in diesem Fall meine Vektoren ungültig macht, ist mir klar.</p>
<p>Mein Lösungsansatz war dafür allerdings folgender:</p>
<pre><code class="language-cpp">for (iterator iter, != end, ++iter) // stilisiert
{

  if (bedingung)
  {
    iterator where = iter;
    iter = vec.insert(where, newItem);
  }

}
</code></pre>
<p>Da ich einen neuen, gültigen Iterator zurückbekomme, müsste das doch eigentlich so funktionieren - oder sehe ich das falsch?</p>
<p>Danke im Voraus.</p>
<p>Gruss<br />
Sid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186797</guid><dc:creator><![CDATA[Sid2K6]]></dc:creator><pubDate>Mon, 04 Dec 2006 12:35:06 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage bzgl std::vector insert() on Mon, 04 Dec 2006 12:36:14 GMT]]></title><description><![CDATA[<p>Iteratoren. Es macht natürlich die ITERATOREN ungültig. Gnarf.</p>
<p>Gruss<br />
Sid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186799</guid><dc:creator><![CDATA[Sid2K6]]></dc:creator><pubDate>Mon, 04 Dec 2006 12:36:14 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage bzgl std::vector insert() on Mon, 04 Dec 2006 12:52:35 GMT]]></title><description><![CDATA[<p>Ja, das müsste funktionieren - wobei es imho nicht nötig ist, den alten Iterator nochmal zwischenzulagern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186809</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 04 Dec 2006 12:52:35 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage bzgl std::vector insert() on Mon, 04 Dec 2006 12:54:31 GMT]]></title><description><![CDATA[<p>Hallo CStoll,</p>
<p>ich hatte nur etwas Bedenken mit dem Lesen und Schreiben des Iterators innerhalb einer Zuweisung. Better safe than sorry <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>Danke für die Hilfe.</p>
<p>Sid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186810</guid><dc:creator><![CDATA[Sid2K6]]></dc:creator><pubDate>Mon, 04 Dec 2006 12:54:31 GMT</pubDate></item></channel></rss>