<?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[eigenen iterator implementieren]]></title><description><![CDATA[<p>Hallo NG,</p>
<p>Ich habe eine Klasse, die intern eine std::map&lt;unsigned int, foo*&gt; benutzt.<br />
Jetzt würde ich nach außen gerne einen Iterator über die Keys (also unsigned int) der map herausgeben. Also nicht den Iterator der Map direkt weitergeben, weil dieser ja ein Iterator über pair&lt;unsigned int, foo*&gt; ist.<br />
Der Nutzer der Klasse soll keine Möglichkeit haben ein Objekt von foo* zu bekommen, außer über die öffentlichen Methoden meiner Klasse.</p>
<p>Ist dies möglich?<br />
Ciao<br />
Timo</p>
<p>PS: Es sollte ein const iterator sein, weil ich eine Änderung der Schlüsselwerte nicht zulassen will.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/232642/eigenen-iterator-implementieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 08:32:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/232642.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Jan 2009 10:53:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to eigenen iterator implementieren on Sun, 25 Jan 2009 10:55:18 GMT]]></title><description><![CDATA[<p>Hallo NG,</p>
<p>Ich habe eine Klasse, die intern eine std::map&lt;unsigned int, foo*&gt; benutzt.<br />
Jetzt würde ich nach außen gerne einen Iterator über die Keys (also unsigned int) der map herausgeben. Also nicht den Iterator der Map direkt weitergeben, weil dieser ja ein Iterator über pair&lt;unsigned int, foo*&gt; ist.<br />
Der Nutzer der Klasse soll keine Möglichkeit haben ein Objekt von foo* zu bekommen, außer über die öffentlichen Methoden meiner Klasse.</p>
<p>Ist dies möglich?<br />
Ciao<br />
Timo</p>
<p>PS: Es sollte ein const iterator sein, weil ich eine Änderung der Schlüsselwerte nicht zulassen will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651897</guid><dc:creator><![CDATA[horscht2999]]></dc:creator><pubDate>Sun, 25 Jan 2009 10:55:18 GMT</pubDate></item><item><title><![CDATA[Reply to eigenen iterator implementieren on Sun, 25 Jan 2009 11:47:47 GMT]]></title><description><![CDATA[<p>Sicher ist das möglich. Du musst einfach eine Klasse schreiben, die intern einen std:<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f5fa.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--world_map"
      title=":map:"
      alt="🗺"
    />:const_iterator hat. Dann musst du noch die nötigen Operatoren wie ++, --, ==, != und * implementieren. Ein paar typedefs wird's auch noch brauchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651923</guid><dc:creator><![CDATA[__Stefan__]]></dc:creator><pubDate>Sun, 25 Jan 2009 11:47:47 GMT</pubDate></item><item><title><![CDATA[Reply to eigenen iterator implementieren on Sun, 25 Jan 2009 12:06:06 GMT]]></title><description><![CDATA[<p><strong>Stefan</strong> schrieb:</p>
<blockquote>
<p>Sicher ist das möglich. Du musst einfach eine Klasse schreiben, die intern einen std:<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f5fa.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--world_map"
      title=":map:"
      alt="🗺"
    />:const_iterator hat. Dann musst du noch die nötigen Operatoren wie ++, --, ==, != und * implementieren. Ein paar typedefs wird's auch noch brauchen.</p>
</blockquote>
<p>Uff das verstehe ich jetzt nicht ganz. Wie gesagt ich möchte ja nicht den Iterator der Map weitergeben, da dieser als Ergebnis ja ein pair hat.<br />
Aber ich glaube ich komme einfach nicht drauf, was ich tun muss.</p>
<p>Ciao<br />
Timo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651927</guid><dc:creator><![CDATA[horscht2999]]></dc:creator><pubDate>Sun, 25 Jan 2009 12:06:06 GMT</pubDate></item><item><title><![CDATA[Reply to eigenen iterator implementieren on Sun, 25 Jan 2009 12:12:35 GMT]]></title><description><![CDATA[<p>horscht2999 schrieb:</p>
<blockquote>
<p>Uff das verstehe ich jetzt nicht ganz. Wie gesagt ich möchte ja nicht den Iterator der Map weitergeben, da dieser als Ergebnis ja ein pair hat.<br />
Aber ich glaube ich komme einfach nicht drauf, was ich tun muss.</p>
</blockquote>
<p>Du weisst was ein iterator ist?</p>
<p>Im grossen und ganzen ist ein iterator wie ein Zeiger. Denke dabei einmal an char* fuer c strings.</p>
<p>Du brauchst einen operator++ und --. Damit du zum naechsten und zum vorherigen Element kommst. Dann natuerlich einen operator* um das Element selber zu bekommen. Und dann noch einen operator-&gt; um eine methode fuer das Element aufzurufen (wenn das bei dir immer nur int ist, ist es natuerlich nicht notwendig).</p>
<p>Das alles kann dir map::iterator aber schon bieten. Du verwendest den map::iterator intern in deiner iterator klasse und leitest deine funktionalitaet an den map::iterator weiter und biegst die sachen um die du anders haben willst. der operator++ funktioniert bei dir und map::iterator ja gleich. Dagegen willst du dass der operator* bei dir einen int statt einem pair liefert - hier musst du also umbiegen und deinem operator* eben den first von dem pair liefern lassen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651933</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 25 Jan 2009 12:12:35 GMT</pubDate></item><item><title><![CDATA[Reply to eigenen iterator implementieren on Sun, 25 Jan 2009 12:17:38 GMT]]></title><description><![CDATA[<p>Ah alles klar, jetzt hats geklingelt. Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651940</guid><dc:creator><![CDATA[horscht2999]]></dc:creator><pubDate>Sun, 25 Jan 2009 12:17:38 GMT</pubDate></item><item><title><![CDATA[Reply to eigenen iterator implementieren on Sun, 25 Jan 2009 17:14:01 GMT]]></title><description><![CDATA[<p>horscht2999 schrieb:</p>
<blockquote>
<p>Ich habe eine Klasse, die intern eine std::map&lt;unsigned int, foo*&gt; benutzt.<br />
Jetzt würde ich nach außen gerne einen Iterator über die Keys (also unsigned int) der map herausgeben.</p>
</blockquote>
<p>eine schöne Anwendung für den <a href="http://www.boost.org/doc/libs/1_37_0/libs/iterator/doc/transform_iterator.html" rel="nofollow">boost.transform_iterator</a>:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;algorithm&gt; // copy
#include &lt;map&gt;
#include &lt;functional&gt; // std::unary_function&lt;&gt;
#include &lt;iterator&gt; // ostream_iterator
#include &lt;boost/iterator/transform_iterator.hpp&gt;

class Klasse
{
    struct foo { int m_nix; };

    struct PairToUint : std::unary_function&lt; std::map&lt; unsigned int, foo* &gt;::value_type, unsigned int &gt;
    {
        result_type operator()( const argument_type&amp; x ) const
        {
            return x.first;
        }
    };

public:
    typedef boost::transform_iterator&lt; PairToUint, std::map&lt; unsigned int, foo* &gt;::const_iterator &gt; const_iterator;
    const_iterator begin() const { return const_iterator( m_foos.begin() ); }
    const_iterator end() const { return const_iterator( m_foos.end() ); }

    Klasse()
        : m_foos()
    {
        m_foos[3] = 0;
        m_foos[7] = 0;
        m_foos[4] = 0;
    }

private:
    std::map&lt; unsigned int, foo* &gt; m_foos;
};

int main()
{
    using namespace std;
    Klasse objekt;
    // ...
    copy( objekt.begin(), objekt.end(), ostream_iterator&lt; unsigned int &gt;( cout &lt;&lt; &quot;Die Keys: &quot;, &quot; &quot; ) );
    cout &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652132</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 25 Jan 2009 17:14:01 GMT</pubDate></item><item><title><![CDATA[Reply to eigenen iterator implementieren on Sun, 25 Jan 2009 19:52:49 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>eine schöne Anwendung für den <a href="http://www.boost.org/doc/libs/1_37_0/libs/iterator/doc/transform_iterator.html" rel="nofollow">boost.transform_iterator</a>...<br />
Gruß<br />
Werner</p>
</blockquote>
<p>Wow genau sowas habe ich gesucht. Habs zwar selbst hinbekommen, aber da ich Boost eh verwende, wird das jetzt so eingebaut.</p>
<p>Vialen Dank!!!<br />
Ciao<br />
Timo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652251</guid><dc:creator><![CDATA[horscht2999]]></dc:creator><pubDate>Sun, 25 Jan 2009 19:52:49 GMT</pubDate></item></channel></rss>