<?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[Iteratoren in Vector speichern]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Problem.<br />
Ich habe zwei Vectoren. Der eine beinhaltet die eigentlichen Elemente (a), der andere beinhaltet nur den Iterator (ai).<br />
Nun möchte ich Elemente aus dem Vector (a) löschen und dadurch erreichen, dass das Element in ai auch &quot;weg&quot; ist.</p>
<p>Es ist so gedacht, dass ich später sehr viele Vectoren (wie <em>ai</em>) habe und durch das Löschen des jeweiligen Elements in Vector <em>a</em><br />
automatisch die Elemente in <em>ai</em> &quot;weg&quot; sind.</p>
<p>Ich wollte bei der späteren Ausgabe dann Vector <em>ai</em> ausgeben, indem ich Schritt für Schritt checke, ob das Elemnt hinter dem Iterator noch existiert.<br />
Aber es kommt schon ein Fehler wenn ich nur Versuche den Vector durchzulaufen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

int main () {

  vector&lt;int&gt; a;
  a.push_back(5);
  a.push_back(10);
  a.push_back(15);
  a.push_back(20);
  a.push_back(25);
  a.push_back(30);
  a.push_back(35);

  vector&lt;vector&lt;int&gt;::iterator&gt; ai;

  for(vector&lt;int&gt;::iterator iter=a.begin(); iter &lt; a.end(); ++iter) {
    ai.push_back(iter);
  }

  a.erase(a.begin()+3);

  for(vector&lt;vector&lt;int&gt;::iterator&gt;::iterator iter=ai.begin(); iter &lt; ai.end();) {
	  cout &lt;&lt; **iter &lt;&lt; &quot; &quot;;
  }

  return 0;
}
</code></pre>
<p>Kann ich es, bzw ist es überhaupt Sinnvoll es so zu lösen?<br />
Ich würde mich sehr freuen, wenn mir jemand helfen würde.</p>
<p>Viele Grüße,<br />
Samuirai</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262209/iteratoren-in-vector-speichern</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 19:46:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262209.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Mar 2010 17:12:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Iteratoren in Vector speichern on Tue, 02 Mar 2010 18:22:41 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Problem.<br />
Ich habe zwei Vectoren. Der eine beinhaltet die eigentlichen Elemente (a), der andere beinhaltet nur den Iterator (ai).<br />
Nun möchte ich Elemente aus dem Vector (a) löschen und dadurch erreichen, dass das Element in ai auch &quot;weg&quot; ist.</p>
<p>Es ist so gedacht, dass ich später sehr viele Vectoren (wie <em>ai</em>) habe und durch das Löschen des jeweiligen Elements in Vector <em>a</em><br />
automatisch die Elemente in <em>ai</em> &quot;weg&quot; sind.</p>
<p>Ich wollte bei der späteren Ausgabe dann Vector <em>ai</em> ausgeben, indem ich Schritt für Schritt checke, ob das Elemnt hinter dem Iterator noch existiert.<br />
Aber es kommt schon ein Fehler wenn ich nur Versuche den Vector durchzulaufen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

int main () {

  vector&lt;int&gt; a;
  a.push_back(5);
  a.push_back(10);
  a.push_back(15);
  a.push_back(20);
  a.push_back(25);
  a.push_back(30);
  a.push_back(35);

  vector&lt;vector&lt;int&gt;::iterator&gt; ai;

  for(vector&lt;int&gt;::iterator iter=a.begin(); iter &lt; a.end(); ++iter) {
    ai.push_back(iter);
  }

  a.erase(a.begin()+3);

  for(vector&lt;vector&lt;int&gt;::iterator&gt;::iterator iter=ai.begin(); iter &lt; ai.end();) {
	  cout &lt;&lt; **iter &lt;&lt; &quot; &quot;;
  }

  return 0;
}
</code></pre>
<p>Kann ich es, bzw ist es überhaupt Sinnvoll es so zu lösen?<br />
Ich würde mich sehr freuen, wenn mir jemand helfen würde.</p>
<p>Viele Grüße,<br />
Samuirai</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863442</guid><dc:creator><![CDATA[Samuirai]]></dc:creator><pubDate>Tue, 02 Mar 2010 18:22:41 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren in Vector speichern on Tue, 02 Mar 2010 17:52:19 GMT]]></title><description><![CDATA[<p><a href="http://www.cplusplus.com/reference/algorithm/copy/" rel="nofollow">std::copy</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863460</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Tue, 02 Mar 2010 17:52:19 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren in Vector speichern on Tue, 02 Mar 2010 18:03:29 GMT]]></title><description><![CDATA[<p>Samuirai schrieb:</p>
<blockquote>
<p>Ich habe zwei Vectoren. Der eine beinhaltet die eigentlichen Elemente (a), der andere beinhaltet nur den Iterator (ai).</p>
</blockquote>
<p>Dann hast Du Dein Programm falsch abgetippt. Ich sehe da zwei Vektoren vom Typ vector&lt;int&gt;.</p>
<p>Lies Dir die Garantien durch, die versch. Container bzgl Validität von Iteratoren machen. Vielleicht kannst Du auch std::list gebrauchen.</p>
<p>Samuirai schrieb:</p>
<blockquote>
<pre><code class="language-cpp">a.erase(a.end());
</code></pre>
</blockquote>
<p>a.end() zeigt auf kein gültiges Element. Das tut es nie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863464</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 02 Mar 2010 18:03:29 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren in Vector speichern on Tue, 02 Mar 2010 18:22:13 GMT]]></title><description><![CDATA[<p>Vielen Dank für die schnellen Antworten.<br />
Mit copy erhalte ich leider nicht das Ergebnis das ich benötige.<br />
Siehe hier:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

int main () {

  vector&lt;int&gt; a; 
  a.push_back(5);
  a.push_back(10);
  a.push_back(15);
  a.push_back(20);
  a.push_back(25);

  vector&lt;int&gt; a1;
  a1.resize(5);

  copy(a.begin(),a.end(),a1.begin());

  a.erase(a.begin());

  for(vector&lt;int&gt;::iterator iter=a1.begin(); iter &lt; a1.end(); ++iter) {
	cout &lt;&lt; *iter &lt;&lt; &quot;,&quot;;
  }

cin.get();
cin.get();

  return 0;
}
</code></pre>
<p>Ich hab das falsche kopiert, tut mir leid.<br />
Hier das Richtige (ich editiers auch nochmal im Erstpost)</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

int main () {

  vector&lt;int&gt; a;
  a.push_back(5);
  a.push_back(10);
  a.push_back(15);
  a.push_back(20);
  a.push_back(25);
  a.push_back(30);
  a.push_back(35);

  vector&lt;vector&lt;int&gt;::iterator&gt; ai;

  for(vector&lt;int&gt;::iterator iter=a.begin(); iter &lt; a.end(); ++iter) {
    ai.push_back(iter);
  }

  a.erase(a.begin()+3);

  for(vector&lt;vector&lt;int&gt;::iterator&gt;::iterator iter=ai.begin(); iter &lt; ai.end();) {
	  cout &lt;&lt; **iter &lt;&lt; &quot; &quot;;
  }

  return 0;
}
</code></pre>
<p>Das klappt auch so weit, ich muss nur irgendwie überprüfen ob **iter existiert oder nicht. Bisjetzt kommt dort der Fehler.</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863470</guid><dc:creator><![CDATA[Samuirai]]></dc:creator><pubDate>Tue, 02 Mar 2010 18:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren in Vector speichern on Tue, 02 Mar 2010 18:31:07 GMT]]></title><description><![CDATA[<p>Samuirai schrieb:</p>
<blockquote>
<p>Das klappt auch so weit, ich muss nur irgendwie überprüfen ob **iter existiert oder nicht. Bis jetzt kommt dort der Fehler.</p>
</blockquote>
<p>Ich sagte doch, schau Dir die Garantien an, die Container machen oder nicht machen. Beim<a href="http://www.cplusplus.com/reference/stl/vector/erase/" rel="nofollow"> <code>erase</code> </a>des <code>vector</code> s werden <strong>alle Iteratoren, die auf das zu löschende Element oder dahinter zeigen, nach dem erase ungültig</strong>. So einfach ist das. Solltest Du alles mal nachlesen. Wer lesen kann ist klar im Vorteil.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863474</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 02 Mar 2010 18:31:07 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren in Vector speichern on Tue, 02 Mar 2010 22:23:30 GMT]]></title><description><![CDATA[<p>Ich hab es jetzt anders gelöst:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

int main () {

  vector&lt;int&gt; a;
  a.push_back(1);
  a.push_back(2);
  a.push_back(3);
  a.push_back(4);
  a.push_back(5);
  a.push_back(6);
  a.push_back(7);
  a.push_back(8);
  a.push_back(9);
  a.push_back(10);

  vector&lt;int*&gt; ai;

  for(vector&lt;int&gt;::iterator iter=a.begin(); iter &lt; a.end(); ++iter) {
	  int *i = &amp;*iter;
    ai.push_back(&amp;*iter);
  }

  *(ai.at(2)) = NULL;

  for(vector&lt;int&gt;::iterator iter=a.begin(); iter &lt; a.end(); ++iter) {
	if(*iter != NULL)
	  cout &lt;&lt; *iter &lt;&lt; &quot; &quot;;
  }

  /*for(vector&lt;int*&gt;::iterator iter=ai.begin(); iter &lt; ai.end(); ++iter) {
	if(*(*iter) != NULL)
	  cout &lt;&lt; *(*iter) &lt;&lt; &quot; &quot;;
  }*/

  cin.get(); cin.get();

  return 0;
}
</code></pre>
<p>Vielen Dank an alle die mir versucht haben zu helfen <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>Viele Grüße,<br />
Samuirai</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863554</guid><dc:creator><![CDATA[Samuirai]]></dc:creator><pubDate>Tue, 02 Mar 2010 22:23:30 GMT</pubDate></item></channel></rss>