<?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[reverse_iterator in iterator umwandeln]]></title><description><![CDATA[<p>Hi,</p>
<p>lassen sich <code>std::list::reverse_iterator</code> en in <code>std::list::iterator</code> en umwandeln?</p>
<p>ich brauche das ganze für std::list::splice, hätte aber gerne r-iteratoren verwendet</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236559/reverse_iterator-in-iterator-umwandeln</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 21:23:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236559.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Mar 2009 22:46:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to reverse_iterator in iterator umwandeln on Mon, 16 Mar 2009 22:59:36 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>lassen sich <code>std::list::reverse_iterator</code> en in <code>std::list::iterator</code> en umwandeln?</p>
<p>ich brauche das ganze für std::list::splice, hätte aber gerne r-iteratoren verwendet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681210</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 16 Mar 2009 22:59:36 GMT</pubDate></item><item><title><![CDATA[Reply to reverse_iterator in iterator umwandeln on Thu, 19 Mar 2009 12:04:34 GMT]]></title><description><![CDATA[<p>Vielleicht so was?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;list&gt;

int main(int argc, char** argv)
{
    std::list&lt;int&gt; testlist;

    for (int i = 0; i &lt; 5; i++)
    {
        testlist.push_back(i);    
    }

    std::list&lt;int&gt;::iterator iter = testlist.begin();

    for (std::list&lt;int&gt;::reverse_iterator riter = testlist.rbegin();
         riter != testlist.rend();
         riter++)
    {
        std::cout &lt;&lt; *riter;

        if (*riter == 2)
        {
            std::cout &lt;&lt; &quot; (remind)&quot;;
            iter = --riter.base();
        }

        std::cout &lt;&lt; &quot;\n&quot;;
    }

    std::cout &lt;&lt; &quot;\nreminded: &quot; &lt;&lt; *iter &lt;&lt; std::endl;

    return 0;
}
</code></pre>
<p>Mit <code>reverse_iterator::base()</code> kann man an den zugrunde liegenden <code>iterator</code> herankommen. Damit <code>rbegin()</code> und <code>rend()</code> analog zu <code>begin()</code> und <code>end()</code> verwendet werden können, hält sich der <code>reverse_iterator</code> intern einen herkömmlichen <code>iterator</code> . Für diesen gilt <code>rbegin() == end()</code> und <code>rend() == begin()</code> . Weil <code>rbegin()</code> dann aber nicht dereferenziert werden dürfte, sorgen die Dereferenzierungs-Operatoren <code>*</code> und <code>-&gt;</code> dafür, dass der interne <code>iterator</code> vorher stets um eins in Richtung <code>begin()</code> gerückt wird, was dann <code>end() - 1</code> entspräche. Bei der Verwendung von <code>reverse_iterator::base()</code> muss dieser Zusammenhang mittels vorherigem Dekrement berücksichtigt werden, damit nicht der interne <code>iterator</code> , sondern das tatsächliche Äquivalent des <code>reverse_iterator</code> s zur Anwendung kommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681219</guid><dc:creator><![CDATA[skreutzer]]></dc:creator><pubDate>Thu, 19 Mar 2009 12:04:34 GMT</pubDate></item></channel></rss>