<?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 vs. Circulator]]></title><description><![CDATA[<p>Hallo,</p>
<p>für eine Library schreibe ich Iteratoren, die ringartig endlos über die Daten<br />
zirkulieren. Ab und zu sieht man dafür die Bezeichnung Circulator. Das finde<br />
ich sinnvoll, weil es die Endlosigkeit zum Ausdruck bringt. Andererseits sehe<br />
ich die Gefahr, den User der Library mit dem (wahrscheinlich neuen) Begriff<br />
zu verwirren. Einen Iterator kennt schließlich jeder. Was denkt Ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284254/iterator-vs-circulator</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 04:27:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284254.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 28 Mar 2011 18:09:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 18:09:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>für eine Library schreibe ich Iteratoren, die ringartig endlos über die Daten<br />
zirkulieren. Ab und zu sieht man dafür die Bezeichnung Circulator. Das finde<br />
ich sinnvoll, weil es die Endlosigkeit zum Ausdruck bringt. Andererseits sehe<br />
ich die Gefahr, den User der Library mit dem (wahrscheinlich neuen) Begriff<br />
zu verwirren. Einen Iterator kennt schließlich jeder. Was denkt Ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041463</guid><dc:creator><![CDATA[sculls pup]]></dc:creator><pubDate>Mon, 28 Mar 2011 18:09:06 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 18:23:01 GMT]]></title><description><![CDATA[<p>Ich würde es so machen. Solange ein normaler Iterator vorhanden ist, kann es ja nicht schadend sein. Aber nur wenn dem Nutzer den Begriff &quot;Circulator&quot; in einer Doku erklärt wird.</p>
<p>MfG, EOutOfResources</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041469</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Mon, 28 Mar 2011 18:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 18:49:43 GMT]]></title><description><![CDATA[<p>sculls pup schrieb:</p>
<blockquote>
<p>Andererseits sehe<br />
ich die Gefahr, den User der Library mit dem (wahrscheinlich neuen) Begriff<br />
zu verwirren. Einen Iterator kennt schließlich jeder. Was denkt Ihr?</p>
</blockquote>
<p>Die Gefahr sehe ich auch. &quot;Iterator&quot; ist eindeutig, ausserdem drückt der Begriff die Abstraktion aus (dass es manchmal keine Rolle spielt, ob der Iterator in einen Ringpuffer oder eine verkettete Liste zeigt). Für alle anderen Datenstrukturen hat man ja auch keine Spezial-Iteratoren.</p>
<p>Zudem sind Iteratoren ohnehin meist Member-Typen, und deutlicher als <code>RingBuffer::Iterator</code> geht es kaum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041483</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 28 Mar 2011 18:49:43 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 19:17:04 GMT]]></title><description><![CDATA[<p>Ich würds iterator nennen, das Iterator Konzept sagt nichts drüber aus ob etwas endlich ist oder nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041508</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 28 Mar 2011 19:17:04 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 19:19:41 GMT]]></title><description><![CDATA[<p>Klappt denn for(it = bla.begin(); it != bla.end(); ++i) auch für den Ring-Iterator?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041509</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 28 Mar 2011 19:19:41 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 19:26:22 GMT]]></title><description><![CDATA[<p>Nein denn es gibt ja kein Ende. Ändert aber nicht dran dass es ein Iterator ist <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2041514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041514</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 28 Mar 2011 19:26:22 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 19:27:14 GMT]]></title><description><![CDATA[<p>Aber bei einem iterator versuche ich diese Schleife zu benutzen, was für mich ein Argument dafür ist, es circulator zu nennen, damit ich mich erst am Namen stoße, bevor ich die Schleife probiere.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041515</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 28 Mar 2011 19:27:14 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 19:41:32 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Nein denn es gibt ja kein Ende.</p>
</blockquote>
<p>Ich würde sagen, das hängt von der Implementierung ab. Ansonsten stimme ich Eisflamme zu: Wenn ich damit kein For-Each machen kann, soll es kein Iterator sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041521</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 28 Mar 2011 19:41:32 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 19:52:56 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>dot schrieb:</p>
<blockquote>
<p>Nein denn es gibt ja kein Ende.</p>
</blockquote>
<p>Ich würde sagen, das hängt von der Implementierung ab. Ansonsten stimme ich Eisflamme zu: Wenn ich damit kein For-Each machen kann, soll es kein Iterator sein.</p>
</blockquote>
<p>Aber ich KANN!<br />
Nur sollten die herauslockenden Funktiionen nicht begin() und end() sein.<br />
Mit begin() und end() laufe ich genau einmal über alle Elemente.<br />
Mit circusBegin() und circusEnd() laufe ich endlos.<br />
circusBegin() kann natürlich einen circular oder circularIterator zurückgeben, es kann auch ein iterator sein, im Falle des Ringbuffers ist das angemessen. circusEnd() gibt am besten einen neverBeingEqualIteratorStubProxyPatternMemberImpersonatingType&lt;decltype(circusBegin())&gt; zurück, den selbst der dümmste Compiler zur Compilezeit bei jedem Vergleich mit == gegen einen decltype(circusBegin()) als ungleich erkennen kann.<br />
Und der Benutzer muß circusEnd() nicht verwenden, ist ja eh zwecklos, er kann auch eine Endlosschleife nehmen, aber er kann auch circusEnd() verwenden, um mit manchen stl-Algorithmen zu arbeiten.</p>
<p>Aber irgendwie gefällt es mir nicht. Hab wohl zu viel mit Ranges und Generatoren gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041524</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 28 Mar 2011 19:52:56 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 19:59:14 GMT]]></title><description><![CDATA[<p>Das Interator Konzept hat doch nichts damit zu tun ob es einen Anfang oder ein Ende gibt, Anfang und Ende selbst werden in diesen Fällen über Iteratoren markiert!? Ich versteh nicht ganz was die Frage ob etwas ein Iterator ist oder nicht mit foreach zu tun hat. Ein Iterator ist einfach ein Objekt mit dem ich einen Container durchlaufen kann. Wenn der Container zirkulär ist lauft der Iterator halt im Kreis. Du kannst dir ja merken von wo du losgelaufen bist wenn du nur einmal durchlaufen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041532</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Mon, 28 Mar 2011 19:59:14 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 20:14:34 GMT]]></title><description><![CDATA[<p>Bei iterator projeziert sich mir halt die begin() -&gt; end() Durchiteration in Form obiger Schleife in meinen Kopf. Wenn die nicht geht, ist schon viel vom Iterator für mich weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041545</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 28 Mar 2011 20:14:34 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 20:39:41 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Klappt denn for(it = bla.begin(); it != bla.end(); ++i) auch für den Ring-Iterator?</p>
</blockquote>
<p>Es gibt kein bla.begin() und bla.end(). Die Daten sind ringförmig miteinander<br />
verpointert, so daß man von einem Element zum nächsten springen kann.</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041571</guid><dc:creator><![CDATA[sculls pup]]></dc:creator><pubDate>Mon, 28 Mar 2011 20:39:41 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Mon, 28 Mar 2011 20:54:24 GMT]]></title><description><![CDATA[<p>Und wenn man nur den Container und kein Element davon hat? Wie fängt man dann an zu iterieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041579</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 28 Mar 2011 20:54:24 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Tue, 29 Mar 2011 12:13:25 GMT]]></title><description><![CDATA[<p>Das Anfangen ist jetzt nicht das Problem.<br />
Eher das Aufhören, allerdings auch nur dann, wenn man a) mit halb-offenen Ranges arbeiten will und b) über alle Elemente drüberiterieren will.<br />
Wobei man sich dazu evtl. auch ein paar unsaubere Tricks einfallen lassen könnte, wenn es denn unbedingt sein muss.</p>
<p>Was den Namen angeht ... &quot;circular iterator&quot; wäre naheliegend, nen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041589</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 29 Mar 2011 12:13:25 GMT</pubDate></item><item><title><![CDATA[Reply to Iterator vs. Circulator on Tue, 29 Mar 2011 06:17:17 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Und wenn man nur den Container und kein Element davon hat? Wie fängt man dann an zu iterieren?</p>
</blockquote>
<p>Der Container hat eine Memberfunktion 'getIterator()', die einen Iterator auf<br />
ein beliebiges Element zurückliefert. Ist der Container leer, so ist er nicht<br />
gültig. Das muß der User prüfen. Im Debug-Mode fliegt eine Assertion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041637</guid><dc:creator><![CDATA[sculls pup]]></dc:creator><pubDate>Tue, 29 Mar 2011 06:17:17 GMT</pubDate></item></channel></rss>