<?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[&amp;quot;Cycling&amp;quot; iterator?]]></title><description><![CDATA[<p>Ich bräuchte einen zyklischen Iterator, der einen Container zyklisch durchläuft, also statt den Beginn und das Ende manuell zu überprüfen</p>
<pre><code class="language-cpp">void cycleVector()
{
    vector&lt;int&gt; intV;

    // fill vector...

    typedef vector&lt;int&gt;::const_iterator Cit;
    Cit cit = intVector.begin();

    switch(key)
    {
    case CursorDown:
        if (cit == intV.end())
        {
            cit = intV.begin();
        }
        else
        {
             ++cit;
        }
        // get item...
        break;
    case CursorUp:
        if (cit == intV.begin())
        {
            cit = intV.end() - 1;
        }
        else
        {
            --cit;
        }
        // get item
        break;
        [...]
    }
}
</code></pre>
<p>Hatte schon die Idee mit Modulo-Fkt</p>
<pre><code class="language-cpp">cit = ((cit++) % size + size) % size
</code></pre>
<p>aber leider ist operator% für Iteratoren nicht definiert.<br />
Gibt es das was in der STL (vermute mal nicht)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284274/quot-cycling-quot-iterator</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 04:32:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284274.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Mar 2011 09:12:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;quot;Cycling&amp;quot; iterator? on Tue, 29 Mar 2011 09:12:36 GMT]]></title><description><![CDATA[<p>Ich bräuchte einen zyklischen Iterator, der einen Container zyklisch durchläuft, also statt den Beginn und das Ende manuell zu überprüfen</p>
<pre><code class="language-cpp">void cycleVector()
{
    vector&lt;int&gt; intV;

    // fill vector...

    typedef vector&lt;int&gt;::const_iterator Cit;
    Cit cit = intVector.begin();

    switch(key)
    {
    case CursorDown:
        if (cit == intV.end())
        {
            cit = intV.begin();
        }
        else
        {
             ++cit;
        }
        // get item...
        break;
    case CursorUp:
        if (cit == intV.begin())
        {
            cit = intV.end() - 1;
        }
        else
        {
            --cit;
        }
        // get item
        break;
        [...]
    }
}
</code></pre>
<p>Hatte schon die Idee mit Modulo-Fkt</p>
<pre><code class="language-cpp">cit = ((cit++) % size + size) % size
</code></pre>
<p>aber leider ist operator% für Iteratoren nicht definiert.<br />
Gibt es das was in der STL (vermute mal nicht)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041696</guid><dc:creator><![CDATA[AlGaN]]></dc:creator><pubDate>Tue, 29 Mar 2011 09:12:36 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;Cycling&amp;quot; iterator? on Tue, 29 Mar 2011 09:21:17 GMT]]></title><description><![CDATA[<p>Kannst dir ja ganz einfach deinen eigenen Iterator bauen:</p>
<pre><code class="language-cpp">template&lt;class Iterator&gt;
class cycling_iterator : boost::iterator_adaptor&lt;cycling_iterator&lt;Iterator&gt;, Iterator&gt;
{
public:
    cycling_iterator(Iterator beg, Iterator end)
        : boost::iterator_adaptor&lt;cycling_iterator&lt;Iterator&gt;, Iterator&gt;(beg), end(end) {}
private:
    Iterator end;
    friend class boost::iterator_core_access; // hieß eventuell anders
    void increment()
    {
        base_reference()++;
        if(base() == end)
           base_reference() = beg;
    }
};

//...

cycling_iterator&lt;vector&lt;int&gt;::iterator&gt; i(v.begin(), v.end());
// immer wider ++i machen
</code></pre>
<p>(ungetestet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041701</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Tue, 29 Mar 2011 09:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;Cycling&amp;quot; iterator? on Tue, 29 Mar 2011 09:21:57 GMT]]></title><description><![CDATA[<p>schreib dir den operator doch selbst für iteratoren<br />
irgendwie mithilfe von if ( it == end() ) it = begin(); oder so</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041702</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 29 Mar 2011 09:21:57 GMT</pubDate></item></channel></rss>