<?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[Public-Zugriff im Iterator]]></title><description><![CDATA[<p>Moin,</p>
<p>ich schreibe gerade einen Iterator für eine MultiMap. Nun habe ich das Problem, das ich mehrere Public-Methoden im Iterator brauche, weil die Map z.b mit &quot;find&quot; darauf zugreifen muss. Ich glaube aber das man von außen keine Methoden vom Iterator aufrufen darf außer den Konstruktor. Ist das so?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/334133/public-zugriff-im-iterator</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 22:18:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334133.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Aug 2015 08:37:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Mon, 24 Aug 2015 08:37:04 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>ich schreibe gerade einen Iterator für eine MultiMap. Nun habe ich das Problem, das ich mehrere Public-Methoden im Iterator brauche, weil die Map z.b mit &quot;find&quot; darauf zugreifen muss. Ich glaube aber das man von außen keine Methoden vom Iterator aufrufen darf außer den Konstruktor. Ist das so?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465313</guid><dc:creator><![CDATA[Iteratorfan]]></dc:creator><pubDate>Mon, 24 Aug 2015 08:37:04 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Mon, 24 Aug 2015 09:15:09 GMT]]></title><description><![CDATA[<p>Ich glaube du hast das Konzept von Iteratoren noch nicht so ganz verstanden. Ein Iterator soll einfach nur eine Position in deinem Container darstellen und als Funktionen gibts eigentlich nur überladene Operatoren, um z.B. zum nächsten Element zu gehen. Warum brauchst du jetzt noch andere Funktionen? Was hat die find Funktion damit zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465318</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Mon, 24 Aug 2015 09:15:09 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Mon, 24 Aug 2015 09:24:57 GMT]]></title><description><![CDATA[<p>Naja, um durch meine Multimap zu iterieren muss man ich im Iterator einen Stack anlegen, der im Konstruktor schonmal bis zum linkesten Element befüllt wird. So, das ist der Normalfall. Aber wenn ich nun die Methode &quot;find&quot; der Map aufrufe, durchläuft er einen anderen Weg und da muss auch der Stack entsprechend gefüllt werden und dazu ist eine Methode im Iterator notwendig.</p>
<p>Die Frage ist daher, wie soll ich das sonst machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465319</guid><dc:creator><![CDATA[Iteratorfan]]></dc:creator><pubDate>Mon, 24 Aug 2015 09:24:57 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Mon, 24 Aug 2015 09:37:33 GMT]]></title><description><![CDATA[<p>Da man das nicht braucht (auch wenn du das behauptest) solltest du das einfach gar nicht machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465323</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Mon, 24 Aug 2015 09:37:33 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Mon, 24 Aug 2015 11:07:25 GMT]]></title><description><![CDATA[<p>Na schön..., würde mir jemand eine Beispiel impelementierung einer find-Methode(einer Multimap), die einen Iterator zurückgibt, geben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465331</guid><dc:creator><![CDATA[Iteratorfan]]></dc:creator><pubDate>Mon, 24 Aug 2015 11:07:25 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Mon, 24 Aug 2015 12:08:18 GMT]]></title><description><![CDATA[<p>Entweder du gibst einfach 2 Iteratoren zurueck (Anfang und Ende des Bereiches, der den find erfeullt) oder du gibst einfach einen Iterator nur auf den Anfang zurueck, mit dem kann man dann ueber den Rest iterieren. Kannst du auch gern in jeder beliebigen STL Implementation nachschlagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2465340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2465340</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Mon, 24 Aug 2015 12:08:18 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Sat, 29 Aug 2015 22:11:30 GMT]]></title><description><![CDATA[<p>Also, da mir nur vom Iterator aus ++(),=!() und * Operator zur verfügen stehen, Wüsste ich nur wie ich eine lineare Suchmethode erstellen könnte, was aber wiederrum nicht so gut ist. Ist es evtl. sinnvoll das die Datenstruktur von der Iteratorklasse &quot;protected&quot; erbt, damit man auf den inhalt des Iterators beschränkt zugreifen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2466168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2466168</guid><dc:creator><![CDATA[Iteratorfan]]></dc:creator><pubDate>Sat, 29 Aug 2015 22:11:30 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Sun, 30 Aug 2015 04:33:16 GMT]]></title><description><![CDATA[<p>Ist das Problem eventuell, dass der Multimap ein Baum zugrunde liegt (von wegen Stack)?. Wenn ja, dann benötigt der Iterator meines erachtens lediglich einen Pointer auf den aktuellen Knoten im Baum. Man kann ohne Stack und Rekursion von einem Knoten in z.B. einem Binären Baum via In-Order-Traversierung zu seinem Vorgänger/Nachfolger &quot;hangeln&quot;. Versuch's mal mit dem am weitesten rechts/links liegenden Knoten im linken/rechten Unterbaum, bzw. dem eines Vorfahren-Knoten, wenn der aktuelle keinen hat (falls ich grad so früh am morgen keinen Denkfehler drinhab ;)). Ansonsten wird in den Knoten von solchen Baum-Datenstrukturen auch oft noch ein Pointer auf den Vorgänger/Nachfolger mitgeführt - etwas mehr Buchführung beim Einfügen/Löschen, aber spart Dereferenzierungen und das &quot;iterieren&quot; wird nicht umständlicher als bei einer verketteten Liste.</p>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2466178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2466178</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Sun, 30 Aug 2015 04:33:16 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Sun, 30 Aug 2015 07:28:31 GMT]]></title><description><![CDATA[<p>Finnegan schrieb:</p>
<blockquote>
<p>Ist das Problem eventuell, dass der Multimap ein Baum zugrunde liegt (von wegen Stack)?. Wenn ja, dann benötigt der Iterator meines erachtens lediglich einen Pointer auf den aktuellen Knoten im Baum. Man kann ohne Stack und Rekursion von einem Knoten in z.B. einem Binären Baum via In-Order-Traversierung zu seinem Vorgänger/Nachfolger &quot;hangeln&quot;.</p>
</blockquote>
<p>Falsch. Man braucht mehr Informationen, zum Beispiel im Iterator den root-Zeiger oder einen history-Stack, oder im Baum Aufwärts- oder rechts-links-Zeiger.</p>
<p>TGGC schrieb:</p>
<blockquote>
<p>…</p>
</blockquote>
<p>Wie immer Unfug oder Thema verfehlt.</p>
<p>Iteratorfan schrieb:</p>
<blockquote>
<p>ich schreibe gerade einen Iterator für eine MultiMap. Nun habe ich das Problem, das ich mehrere Public-Methoden im Iterator brauche, weil die Map z.b mit &quot;find&quot; darauf zugreifen muss. Ich glaube aber das man von außen keine Methoden vom Iterator aufrufen darf außer den Konstruktor. Ist das so?</p>
</blockquote>
<p>Fremde Leute &quot;dürfen&quot; nur das aufrufen, was in der Doku steht. Steht da kein it.getImplPtr(), dann &quot;dürfen&quot; sie das nicht. Das kannste gerne unterstützen, indem Du getImplPtr() private machast und die MuMa&lt;Foo&gt; zum offiziellen friend des MuMa&lt;Foo&gt;::Iterators erklärst.</p>
<p>Aber normalerweise benutzt Du innerhalb der find()-Implementierung überhaupt keine Iteratoren, sondern bloß Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2466180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2466180</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 30 Aug 2015 07:28:31 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Sun, 30 Aug 2015 08:40:46 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Finnegan schrieb:</p>
<blockquote>
<p>Ist das Problem eventuell, dass der Multimap ein Baum zugrunde liegt (von wegen Stack)?. Wenn ja, dann benötigt der Iterator meines erachtens lediglich einen Pointer auf den aktuellen Knoten im Baum. Man kann ohne Stack und Rekursion von einem Knoten in z.B. einem Binären Baum via In-Order-Traversierung zu seinem Vorgänger/Nachfolger &quot;hangeln&quot;.</p>
</blockquote>
<p>Falsch. Man braucht mehr Informationen, zum Beispiel im Iterator den root-Zeiger oder einen history-Stack, oder im Baum Aufwärts- oder rechts-links-Zeiger.</p>
</blockquote>
<p>&quot;Falsch&quot; ist ein bisschen hart. Bin davon ausgegangen, dass es &quot;parent&quot;-Zeiger gibt und hab nicht dran gedacht, dass man die auch weglassen kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    />.<br />
Aber selbst ohne die - kann ich nicht einfach jedesmal stupide immer von der Wurzel suchen? Mit alle Elemente in <code>n log n</code> interieren gewinnt man zwar keinen Blumentopf, aber man kann sich von dem gesparten Stack nen Eis kaufen <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>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2466183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2466183</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Sun, 30 Aug 2015 08:40:46 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Sun, 30 Aug 2015 08:54:05 GMT]]></title><description><![CDATA[<p>Finnegan schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Finnegan schrieb:</p>
<blockquote>
<p>Ist das Problem eventuell, dass der Multimap ein Baum zugrunde liegt (von wegen Stack)?. Wenn ja, dann benötigt der Iterator meines erachtens lediglich einen Pointer auf den aktuellen Knoten im Baum. Man kann ohne Stack und Rekursion von einem Knoten in z.B. einem Binären Baum via In-Order-Traversierung zu seinem Vorgänger/Nachfolger &quot;hangeln&quot;.</p>
</blockquote>
<p>Falsch. Man braucht mehr Informationen, zum Beispiel im Iterator den root-Zeiger oder einen history-Stack, oder im Baum Aufwärts- oder rechts-links-Zeiger.</p>
</blockquote>
<p>&quot;Falsch&quot; ist ein bisschen hart. Bin davon ausgegangen, dass es &quot;parent&quot;-Zeiger gibt und hab nicht dran gedacht, dass man die auch weglassen kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    />.<br />
Aber selbst ohne die - kann ich nicht einfach jedesmal stupide immer von der Wurzel suchen? Mit alle Elemente in <code>n log n</code> interieren gewinnt man zwar keinen Blumentopf, aber man kann sich von dem gesparten Stack nen Eis kaufen <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>
</blockquote>
<p>Nein. ++i soll gehen. Hat i nur einen Node*, geht das eben nicht. Hast ja keinen Zeiger auf die Wurzel verfügbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2466184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2466184</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 30 Aug 2015 08:54:05 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Sun, 30 Aug 2015 09:25:45 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Nein. ++i soll gehen. Hat i nur einen Node*, geht das eben nicht. Hast ja keinen Zeiger auf die Wurzel verfügbar.</p>
</blockquote>
<p>hehe... Wusste doch dass was fehlt ;). Gut, in dem Fall braucht der Interator mehr als nur den <code>Node*</code> . Wie siehts mit &quot;mindestens noch den Wurzel-Pointer&quot; aus? Wahlweise nur diesen oder als unterstes Stack-Element, oder indirekt als <code>MuMap*</code> ? <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="😃"
    /><br />
Und ohnehin - ich denke man kann durchaus rechts/links-Pointer anregen - ich denke in den meisten Anwendungsfällen sind die eine gute Wahl - es sei denn man hat einen guten Grund besonders sparsam zu sein.</p>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2466185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2466185</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Sun, 30 Aug 2015 09:25:45 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Sun, 30 Aug 2015 14:29:29 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Fremde Leute &quot;dürfen&quot; nur das aufrufen, was in der Doku steht. Steht da kein it.getImplPtr(), dann &quot;dürfen&quot; sie das nicht. Das kannste gerne unterstützen, indem Du getImplPtr() private machast und die MuMa&lt;Foo&gt; zum offiziellen friend des MuMa&lt;Foo&gt;::Iterators erklärst.</p>
</blockquote>
<p>Danke, der Tipp mit dem &quot;friend&quot; hat geholfen.<br />
Hier das ist mein bislang funktionierendes Ergebnis:</p>
<pre><code>Iterator find_help(const Key&amp; mKey,Node* tmp,Iterator i){
        if(tmp!=nullptr){
            if(tmp-&gt;mKey!=mKey){
                i.mStack.push_back(tmp);
                if(mKey&lt;tmp-&gt;mKey){
                    find_help(mKey,tmp-&gt;mLeft,i);
                }else if(mKey&gt;tmp-&gt;mKey){
                    find_help(mKey,tmp-&gt;mRight,i);
                }
            }else if(tmp-&gt;mKey==mKey){
                i.mStack.push_back(tmp);
                i.mNode = tmp;
                i.updatePair();//Aktualisiert das Pair mit dem neuen mNode.
            }
        }
        return i;
    }
</code></pre>
<p>volkard schrieb:</p>
<blockquote>
<p>Aber normalerweise benutzt du innerhalb der find()-Implementierung überhaupt keine Iteratoren, sondern bloß Zeiger.</p>
</blockquote>
<p>Aber die find-Methode gibt einen Iterator zurück und deswegen muss die Methode doch irgendwie den Iterator bis zum fundus steuern oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2466211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2466211</guid><dc:creator><![CDATA[Iteratorfan]]></dc:creator><pubDate>Sun, 30 Aug 2015 14:29:29 GMT</pubDate></item><item><title><![CDATA[Reply to Public-Zugriff im Iterator on Sun, 30 Aug 2015 15:07:56 GMT]]></title><description><![CDATA[<p>Nur bei deinem stackbasierten Iterator. Wenn der Iterator nicht mehr als ein Zeiger auf ein Knoten wäre kannst du einfach Iteratoren für einen Knoten anlegen. Wie du zu dem Knoten gefunden hast ist dann egal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2466212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2466212</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Sun, 30 Aug 2015 15:07:56 GMT</pubDate></item></channel></rss>