<?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[Ist das Dekrementieren eines Iterators auf das Ende einer Liste erlaubt?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ist das Dekrementieren eines Iterators auf das Ende einer Liste laut Standard erlaubt? Ich bin mir bei folgendem Quelltext, nicht sicher, ob ein undefiniertes Verhalten vorliegt:</p>
<pre><code class="language-cpp">std::list&lt;int&gt; coll;
  coll.push_back(32);
  coll.push_back(22);
  std::list&lt;int&gt;::iterator it = coll.begin();
  BOOST_CHECK( *it == 32 );
  ++it;
  BOOST_CHECK( *it == 22 );
  ++it;
  BOOST_CHECK( it == coll.end() );
  --it;
  BOOST_CHECK( *it == 22 );
</code></pre>
<p>Da ja <strong>iterator::end()</strong> einen iterator auf das Element nach dem Letzten zeigt, darf man ihn ja nicht derefenzieren. Bei einem <strong>--it</strong> passiert ja intern so etwas wie:</p>
<pre><code class="language-cpp">p = p-&gt;prev;
</code></pre>
<p>Es findet ein Derefenzieren des zugrundeliegenden Zeigers statt und das sollte doch schief gehen, oder? Oder wird das intern abgefangen und ein iterator auf das letzte Element zurückgegeben, so dass ein Dekrementieren auf einen end-iterator definiert ist?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209481/ist-das-dekrementieren-eines-iterators-auf-das-ende-einer-liste-erlaubt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 17:35:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209481.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 31 Mar 2008 11:13:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ist das Dekrementieren eines Iterators auf das Ende einer Liste erlaubt? on Mon, 31 Mar 2008 11:13:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ist das Dekrementieren eines Iterators auf das Ende einer Liste laut Standard erlaubt? Ich bin mir bei folgendem Quelltext, nicht sicher, ob ein undefiniertes Verhalten vorliegt:</p>
<pre><code class="language-cpp">std::list&lt;int&gt; coll;
  coll.push_back(32);
  coll.push_back(22);
  std::list&lt;int&gt;::iterator it = coll.begin();
  BOOST_CHECK( *it == 32 );
  ++it;
  BOOST_CHECK( *it == 22 );
  ++it;
  BOOST_CHECK( it == coll.end() );
  --it;
  BOOST_CHECK( *it == 22 );
</code></pre>
<p>Da ja <strong>iterator::end()</strong> einen iterator auf das Element nach dem Letzten zeigt, darf man ihn ja nicht derefenzieren. Bei einem <strong>--it</strong> passiert ja intern so etwas wie:</p>
<pre><code class="language-cpp">p = p-&gt;prev;
</code></pre>
<p>Es findet ein Derefenzieren des zugrundeliegenden Zeigers statt und das sollte doch schief gehen, oder? Oder wird das intern abgefangen und ein iterator auf das letzte Element zurückgegeben, so dass ein Dekrementieren auf einen end-iterator definiert ist?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1483675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1483675</guid><dc:creator><![CDATA[cpp::lehrling]]></dc:creator><pubDate>Mon, 31 Mar 2008 11:13:11 GMT</pubDate></item><item><title><![CDATA[Reply to Ist das Dekrementieren eines Iterators auf das Ende einer Liste erlaubt? on Mon, 31 Mar 2008 13:00:23 GMT]]></title><description><![CDATA[<p>Du verwechselst Iterator und Wert. Zugriff auf den Wert ( <code>*it</code> ) ist verboten. Der Wert enthält ja aber auch keinen 'prev'-Zeiger sondern der Iterator enthält einen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1483744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1483744</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 31 Mar 2008 13:00:23 GMT</pubDate></item></channel></rss>