<?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[iterator auf begin()-1 setzen]]></title><description><![CDATA[<p>Funktioniert sowas überhaupt?</p>
<pre><code>const std::vector&lt;User*&gt; &amp;user= company.getUser();
  std::vector&lt;User*&gt;::const_iterator user_it;

  for( user_it = user.begin(); user_it != user.end(); user_it++ )
  {
    const std::vector&lt;User*&gt; &amp;team = (*user_it)-&gt;getTeamMembers();
    std::vector&lt;User*&gt;::const_iterator team_it;

    team_it = team.begin() - 1;
    while( ++team_it != team .end() )
    {
      std::cout &lt;&lt; (*team_it)-&gt;getName() &lt;&lt; std::endl;
    }
  } 
}
</code></pre>
<p>ich hätte es ja so geschrieben:</p>
<pre><code>team_it = team.begin();
while(team_it != team.end()){
  std::cout  &lt;&lt; (*team_it)-&gt;getName() &lt;&lt; std::endl;
  team_it++;
}
</code></pre>
<p>so schauen die Klassen aus:</p>
<pre><code>class User
{
  private:
   std::string name;
   std::vector &lt;User*&gt; teammember;
...
}

class Company
{
  private:
    std::vector &lt;User*&gt; users;
}
</code></pre>
<p>Ich muss es aber wie oben angegeben verwenden. Wenn ich es wie oben verwende bekomme ich einen Fehler in Zeile 9 (team_it = team.begin() - 1;). Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/315482/iterator-auf-begin-1-setzen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 18:04:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/315482.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Apr 2013 19:56:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to iterator auf begin()-1 setzen on Wed, 03 Apr 2013 19:56:00 GMT]]></title><description><![CDATA[<p>Funktioniert sowas überhaupt?</p>
<pre><code>const std::vector&lt;User*&gt; &amp;user= company.getUser();
  std::vector&lt;User*&gt;::const_iterator user_it;

  for( user_it = user.begin(); user_it != user.end(); user_it++ )
  {
    const std::vector&lt;User*&gt; &amp;team = (*user_it)-&gt;getTeamMembers();
    std::vector&lt;User*&gt;::const_iterator team_it;

    team_it = team.begin() - 1;
    while( ++team_it != team .end() )
    {
      std::cout &lt;&lt; (*team_it)-&gt;getName() &lt;&lt; std::endl;
    }
  } 
}
</code></pre>
<p>ich hätte es ja so geschrieben:</p>
<pre><code>team_it = team.begin();
while(team_it != team.end()){
  std::cout  &lt;&lt; (*team_it)-&gt;getName() &lt;&lt; std::endl;
  team_it++;
}
</code></pre>
<p>so schauen die Klassen aus:</p>
<pre><code>class User
{
  private:
   std::string name;
   std::vector &lt;User*&gt; teammember;
...
}

class Company
{
  private:
    std::vector &lt;User*&gt; users;
}
</code></pre>
<p>Ich muss es aber wie oben angegeben verwenden. Wenn ich es wie oben verwende bekomme ich einen Fehler in Zeile 9 (team_it = team.begin() - 1;). Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2312224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2312224</guid><dc:creator><![CDATA[123kid]]></dc:creator><pubDate>Wed, 03 Apr 2013 19:56:00 GMT</pubDate></item><item><title><![CDATA[Reply to iterator auf begin()-1 setzen on Wed, 03 Apr 2013 20:02:07 GMT]]></title><description><![CDATA[<p>team.begin() - 1 ist nicht definiert. Schreib halt</p>
<pre><code class="language-cpp">for(team_it = team.begin() - 1; team_it != team.end(); ++team_it)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2312225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2312225</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Wed, 03 Apr 2013 20:02:07 GMT</pubDate></item><item><title><![CDATA[Reply to iterator auf begin()-1 setzen on Wed, 03 Apr 2013 20:05:50 GMT]]></title><description><![CDATA[<p>Fehler posten wäre ganz nett.<br />
(Ist das überhaupt ein Compiler-Fehler gewesen? )</p>
<p>seldon schrieb:</p>
<blockquote>
<p>team.begin() - 1 ist nicht definiert. Schreib halt</p>
<pre><code class="language-cpp">for(team_it = team.begin(); team_it != team.end(); ++team_it)
</code></pre>
</blockquote>
<p>FIFY</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2312226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2312226</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 03 Apr 2013 20:05:50 GMT</pubDate></item><item><title><![CDATA[Reply to iterator auf begin()-1 setzen on Wed, 03 Apr 2013 20:47:43 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>FIF<strong>I</strong></p>
</blockquote>
<p>FTFY. Aber was haben Hundenamen hier verloren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2312230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2312230</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 03 Apr 2013 20:47:43 GMT</pubDate></item><item><title><![CDATA[Reply to iterator auf begin()-1 setzen on Thu, 04 Apr 2013 00:29:59 GMT]]></title><description><![CDATA[<p>Das dürfte in diesem spezial Fall evtl. klappen.</p>
<p>Die Iteratoren von vector sind häufig in der implementierung pointer, so dass am ende da nur pointerarithmetik ist.<br />
Und weil die Schleife direkt wieder hochzählt, muss er mit begin() -1 starten, damit er das erste Mitglied nicht überspringt.<br />
Aber dass ist alles andere als sauberer code, alle elemente eines vectors lassen sich eleganter durchgehen, wie du schon erkannt hattest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2312264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2312264</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Thu, 04 Apr 2013 00:29:59 GMT</pubDate></item><item><title><![CDATA[Reply to iterator auf begin()-1 setzen on Thu, 04 Apr 2013 06:50:28 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Fehler posten wäre ganz nett.<br />
(Ist das überhaupt ein Compiler-Fehler gewesen? )</p>
<p>seldon schrieb:</p>
<blockquote>
<p>team.begin() - 1 ist nicht definiert. Schreib halt</p>
<pre><code class="language-cpp">for(team_it = team.begin(); team_it != team.end(); ++team_it)
</code></pre>
</blockquote>
<p>FIFY</p>
</blockquote>
<p>Compiler-Fehler ist es keiner. Wenn ich das Programm starte stürzt er in Zeile 9 mit folgender Fehlermeldung ab Debug Assertion Failed! Expression: (&quot;_Myptr + _Off &lt;= ((_Myvec *)(this-&gt;_Mycont))-&gt;_Mylast '&amp;&amp;' _Myptr + _Off &gt;= ((_Myvec *)(this-&gt; _Mycont))-&gt;_Myfirst&quot;,0)</p>
<p>Wenn ich es durchdebugge funktioniert das team.begin() noch (stehen auch die richtigen Daten drinnen), dass -1 ruft den - Operator vom vector auf, der wiederrum ruft den -= Operator, welcher den +=operator aufruft in welchem er (mit obiger Fehlermeldung) abstürzt in der Zeile:<br />
_SCL_SECURE_VALIDATE_RANGE( _Myptr + _Off &lt;= ((_Myvec *)(this-&gt;_Mycont))-&gt;_Mylast '&amp;&amp;' _Myptr + _Off &gt;= ((_Myvec *)(this-&gt;_Mycont))-&gt;_Myfirst);</p>
<p>phlox81 schrieb:</p>
<blockquote>
<p>Das dürfte in diesem spezial Fall evtl. klappen.</p>
<p>Die Iteratoren von vector sind häufig in der implementierung pointer, so dass am ende da nur pointerarithmetik ist.<br />
Und weil die Schleife direkt wieder hochzählt, muss er mit begin() -1 starten, damit er das erste Mitglied nicht überspringt.<br />
Aber dass ist alles andere als sauberer code, alle elemente eines vectors lassen sich eleganter durchgehen, wie du schon erkannt hattest.</p>
</blockquote>
<p>Weiß ich, nur muss ich mich an die Angaben halten, leider!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2312277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2312277</guid><dc:creator><![CDATA[123kid]]></dc:creator><pubDate>Thu, 04 Apr 2013 06:50:28 GMT</pubDate></item><item><title><![CDATA[Reply to iterator auf begin()-1 setzen on Thu, 04 Apr 2013 07:13:44 GMT]]></title><description><![CDATA[<p>123kid schrieb:</p>
<blockquote>
<p>Wenn ich es durchdebugge funktioniert das team.begin() noch (stehen auch die richtigen Daten drinnen), dass -1 ruft den - Operator vom vector auf, der wiederrum ruft den -= Operator, welcher den +=operator aufruft in welchem er (mit obiger Fehlermeldung) abstürzt in der Zeile:</p>
</blockquote>
<p>In dem Code, den du uns zu der Fehlermeldung gezeigt hast, ist aber kein -1 mehr drin. Du sollst den gesamten Code der while-Schleife</p>
<pre><code>team_it = team.begin() - 1;
    while( ++team_it != team .end() )
</code></pre>
<p>durch die for-Schleife ersetzen:</p>
<pre><code>for(team_it = team.begin(); team_it != team.end(); ++team_it)
</code></pre>
<p>Dann funktioniert das auch. Pass auf, in seldons Code war ein Fehler, nimm die Version von Sone oder mir.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2312282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2312282</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 04 Apr 2013 07:13:44 GMT</pubDate></item><item><title><![CDATA[Reply to iterator auf begin()-1 setzen on Thu, 04 Apr 2013 07:22:14 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>FIF<strong>I</strong></p>
</blockquote>
<p>FTFY. Aber was haben Hundenamen hier verloren?</p>
</blockquote>
<p>Die Namen ihrer Kekse. Na. Da haben sie doch schon einen gefunden. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>@TE:<br />
Ab C++11 kannst du auch ganz bequem range-based for benutzen:</p>
<pre><code>for( auto const&amp; t : team )
      std::cout &lt;&lt; t.getName() &lt;&lt; '\n';
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2312287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2312287</guid><dc:creator><![CDATA[sone_logoff]]></dc:creator><pubDate>Thu, 04 Apr 2013 07:22:14 GMT</pubDate></item><item><title><![CDATA[Reply to iterator auf begin()-1 setzen on Thu, 04 Apr 2013 07:29:55 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>123kid schrieb:</p>
<blockquote>
<p>Wenn ich es durchdebugge funktioniert das team.begin() noch (stehen auch die richtigen Daten drinnen), dass -1 ruft den - Operator vom vector auf, der wiederrum ruft den -= Operator, welcher den +=operator aufruft in welchem er (mit obiger Fehlermeldung) abstürzt in der Zeile:</p>
</blockquote>
<p>In dem Code, den du uns zu der Fehlermeldung gezeigt hast, ist aber kein -1 mehr drin. Du sollst den gesamten Code der while-Schleife</p>
<pre><code>team_it = team.begin() - 1;
    while( ++team_it != team .end() )
</code></pre>
<p>durch die for-Schleife ersetzen:</p>
<pre><code>for(team_it = team.begin(); team_it != team.end(); ++team_it)
</code></pre>
<p>Dann funktioniert das auch. Pass auf, in seldons Code war ein Fehler, nimm die Version von Sone oder mir.</p>
</blockquote>
<p>Wie gesagt diesen Code:</p>
<pre><code>team_it = team.begin() - 1;
    while( ++team_it != team .end() )
</code></pre>
<p>darf ich nicht verändern, weil er vorgegeben ist . Die Alternativen dafür sind mir schon klar (ich hätte es ja auch anders gemacht).<br />
Als wenn ich diesen Code debugge, bekomme ich den obigen Fehler. Ich möchte keine alternativen Codes (wie gesagt, sind mir bekannt), ich möchte wissen wieso dieser Code nicht funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2312291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2312291</guid><dc:creator><![CDATA[123kid]]></dc:creator><pubDate>Thu, 04 Apr 2013 07:29:55 GMT</pubDate></item><item><title><![CDATA[Reply to iterator auf begin()-1 setzen on Thu, 04 Apr 2013 07:46:37 GMT]]></title><description><![CDATA[<p>123kid schrieb:</p>
<blockquote>
<p>Wie gesagt diesen Code:</p>
<pre><code>team_it = team.begin() - 1;
    while( ++team_it != team .end() )
</code></pre>
<p>darf ich nicht verändern, weil er vorgegeben ist .</p>
</blockquote>
<p>Dann hilft nur eines: Buch wegschmeißen, Kurs abbrechen, Tutorial aus den Bookmarks löschen. Wo auch immer du solchen Unsinn lernst, du solltest dort nicht noch mehr lernen.</p>
<p>Deine Fragestellung ist unbeantwortbar, ein Dekrement von begin() ist undefiniert. Punkt. Sei froh, dass es abstürzt, so sieht man wenigstens, dass es falsch ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2312303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2312303</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 04 Apr 2013 07:46:37 GMT</pubDate></item><item><title><![CDATA[Reply to iterator auf begin()-1 setzen on Thu, 04 Apr 2013 08:03:12 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>123kid schrieb:</p>
<blockquote>
<p>Wie gesagt diesen Code:</p>
<pre><code>team_it = team.begin() - 1;
    while( ++team_it != team .end() )
</code></pre>
<p>darf ich nicht verändern, weil er vorgegeben ist .</p>
</blockquote>
<p>Dann hilft nur eines: Buch wegschmeißen, Kurs abbrechen, Tutorial aus den Bookmarks löschen. Wo auch immer du solchen Unsinn lernst, du solltest dort nicht noch mehr lernen.</p>
<p>Deine Fragestellung ist unbeantwortbar, ein Dekrement von begin() ist undefiniert. Punkt. Sei froh, dass es abstürzt, so sieht man wenigstens, dass es falsch ist.</p>
</blockquote>
<p>Danke. Das wollte ich eigentlich wissen (bestätigt haben). Steht halt explizit in der Angabe, dass dieser Teil nicht verändert werden darf. Ich hätte es eh anders gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2312311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2312311</guid><dc:creator><![CDATA[123kid]]></dc:creator><pubDate>Thu, 04 Apr 2013 08:03:12 GMT</pubDate></item></channel></rss>