<?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 in den Typ umwandeln?]]></title><description><![CDATA[<p>Hallo ich habe eine Klasse, z.b. Artikel.<br />
Nun speichere ich davon mehrre objekte in einer list&lt;Artikel&gt;.<br />
Zum auslesen benutze ich eine for-Schleife mit einem list&lt;Artikel&gt;::iterator, jetzt möchte ich die einzeleinträge weiter an eine Funktion<br />
übergeben, aber wie kann ich ein list&lt;Artikel&gt;::iterator in ein z.b. Artikel* convertieren`?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/239311/iterator-in-den-typ-umwandeln</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 17:14:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/239311.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Apr 2009 21:39:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to iterator in den Typ umwandeln? on Tue, 21 Apr 2009 21:39:48 GMT]]></title><description><![CDATA[<p>Hallo ich habe eine Klasse, z.b. Artikel.<br />
Nun speichere ich davon mehrre objekte in einer list&lt;Artikel&gt;.<br />
Zum auslesen benutze ich eine for-Schleife mit einem list&lt;Artikel&gt;::iterator, jetzt möchte ich die einzeleinträge weiter an eine Funktion<br />
übergeben, aber wie kann ich ein list&lt;Artikel&gt;::iterator in ein z.b. Artikel* convertieren`?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699438</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Tue, 21 Apr 2009 21:39:48 GMT</pubDate></item><item><title><![CDATA[Reply to iterator in den Typ umwandeln? on Tue, 21 Apr 2009 21:45:29 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::list&lt;Artikel&gt;::iterator Iterator;

Artikel  Object    =   *Iterator;
Artikel&amp; Reference =   *Iterator;
Artikel* Pointer   = &amp;(*Iterator);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1699440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699440</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 21 Apr 2009 21:45:29 GMT</pubDate></item><item><title><![CDATA[Reply to iterator in den Typ umwandeln? on Wed, 22 Apr 2009 06:29:43 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">(*Iterator).DoAnything();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1699502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699502</guid><dc:creator><![CDATA[juzklzfujktsrh]]></dc:creator><pubDate>Wed, 22 Apr 2009 06:29:43 GMT</pubDate></item><item><title><![CDATA[Reply to iterator in den Typ umwandeln? on Wed, 22 Apr 2009 06:46:33 GMT]]></title><description><![CDATA[<p>Danke, es geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699505</guid><dc:creator><![CDATA[lord_fritte]]></dc:creator><pubDate>Wed, 22 Apr 2009 06:46:33 GMT</pubDate></item><item><title><![CDATA[Reply to iterator in den Typ umwandeln? on Wed, 22 Apr 2009 10:19:27 GMT]]></title><description><![CDATA[<p>juzklzfujktsrh schrieb:</p>
<blockquote>
<pre><code class="language-cpp">(*Iterator).DoAnything();
</code></pre>
</blockquote>
<p>Das geht einfacher:</p>
<pre><code class="language-cpp">iterator-&gt;DoAnything();
</code></pre>
<p>Der <code>operator -&gt;</code> ist bei den Iteratoren überladen, so dass man dadurch Zugriff auf das Objekt dahinter hat.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699591</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 22 Apr 2009 10:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to iterator in den Typ umwandeln? on Wed, 22 Apr 2009 10:59:00 GMT]]></title><description><![CDATA[<p>Kannst aber nicht per -&gt; an den Wert um ihn an eine Funktion zu übergeben, wie es im Eingangsposting gefragt 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>
<p>Wobei ich folgendes irgendwie &quot;schick&quot; finde:</p>
<p>doSomething(iterator-&gt;);</p>
<p><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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699607</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 22 Apr 2009 10:59:00 GMT</pubDate></item><item><title><![CDATA[Reply to iterator in den Typ umwandeln? on Wed, 22 Apr 2009 11:23:07 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Kannst aber nicht per -&gt; an den Wert um ihn an eine Funktion zu übergeben, wie es im Eingangsposting gefragt 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>
</blockquote>
<p>1. Ich bezog mich ja auch nur auf die Aussage von juzklzfujktsrh.<br />
2. Auch wenn es idiotisch ist, doch es geht:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

void foo(int*)
{
}

int main()
{
	std::vector&lt;int&gt; vec;
	vec.push_back(0);

	foo(vec.begin().operator-&gt;());
}
</code></pre>
<p>Kompiliert bei mir einwandfrei :p</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699622</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 22 Apr 2009 11:23:07 GMT</pubDate></item><item><title><![CDATA[Reply to iterator in den Typ umwandeln? on Wed, 22 Apr 2009 12:31:50 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<pre><code class="language-cpp">foo(vec.begin().operator-&gt;());
</code></pre>
<p>Kompiliert bei mir einwandfrei :p</p>
</blockquote>
<p>Nur solange, wie vector&lt;T&gt;::iterator::operator-&gt; ein T* zurückliefert. Das wird vom Standard nicht garantiert. Es ist dort lediglich verlangt, dass iter-&gt;m das selbe ergibt wie (*iter).m.</p>
<p>Wenn der Iterator intern nicht mit Pointern, sondern anderen Pointer-ähnlichen Objekten arbeitet (z.B. einem anderen Iterator, wie das bei einer Implementierung von reverse_iterator der Fall sein könnte), dann kann op-&gt; durchaus ein anderes Objekt zurückliefern, das auch op-&gt; implementiert hat.</p>
<p>Bsp:</p>
<pre><code class="language-cpp">template&lt;class RAIter&gt;
class simple_reverse_iter 
{
  RAIter iter;
public:
  typedef typename RAIter::reference reference;
  simple_reverse_iter&amp; operator ++() {--iter; return *this}

  reference operator*() {return *iter;}
  RAIter&amp; operator-&gt;() {return iter;}
};

int main()
{
  typedef std::vector&lt;int&gt;::iterator Iter:
  typedef simple_reverse_iter&lt;Iter&gt; ReverseIter;
  typedef simple_reverse_iter&lt;ReverseIter&gt; NotReallyReverseIter;
  typedef simple_reverse_iter&lt;NotReallyReverseIter&gt; WTFNowIAmConfusedIter;
}
</code></pre>
<p>Ich denk mal du kannst dir vorstellen was ich meine <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="😉"
    /><br />
(sonst siehe auch Artikel zur Operatorüberladung, Abschnitt zu op-&gt; ) <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/1699656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699656</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 22 Apr 2009 12:31:50 GMT</pubDate></item><item><title><![CDATA[Reply to iterator in den Typ umwandeln? on Wed, 22 Apr 2009 12:48:46 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Ich denk mal du kannst dir vorstellen was ich meine <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>Herje, es war ja auch nicht wirklich ernst gemeint. Ja ich kann mir vorstellen, was du meinst. Ich habe doch nur auf den Post von ... (copy &amp; paste) ... juzklzfujktsrh geantwortet. <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="😃"
    /></p>
<p>Hmmm, da kommt mir eine Idee ...</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iostream&gt;

template&lt;typename ObjT, typename FuncT&gt;
void send_to(ObjT* obj, FuncT func)
{
	func(obj);
}

template&lt;typename ObjT, typename FuncT&gt;
void send_to(ObjT&amp; obj, FuncT func)
{
	send_to(obj.operator-&gt;(), func);
}

void foo(int* p)
{
	std::cout &lt;&lt; *p &lt;&lt; std::endl;
}

int main()
{
	std::vector&lt;int&gt; vec;
	vec.push_back(5);

	send_to(vec.begin(), &amp;foo);
	send_to(vec.rbegin(), &amp;foo);

	return 0;
}
</code></pre>
<p>Zufrieden? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699663</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 22 Apr 2009 12:48:46 GMT</pubDate></item><item><title><![CDATA[Reply to iterator in den Typ umwandeln? on Wed, 22 Apr 2009 13:21:38 GMT]]></title><description><![CDATA[<p>Eine Erweiterung meines Horizontes bezüglich C++ hat ergeben, dass mein hier gegebenes Statement Unsinn war. <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699671</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 22 Apr 2009 13:21:38 GMT</pubDate></item><item><title><![CDATA[Reply to iterator in den Typ umwandeln? on Wed, 22 Apr 2009 13:13:56 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Bei einem Reverseiterator sollte <code>operator-&gt;()</code> aber nicht wirklich den gekapselten Iterator zurückgeben, sondern das Objekt, das durch den gekapselten Iterator referenziert wird.<br />
Bei Deiner Version müsste man <code>ReverseIter.operator-&gt;().operator-&gt;()</code> schreiben, um an das unterliegende Objekt zu kommen. Das widerspricht aber dem definierten Standardverhalten von Iteratoren.</p>
</blockquote>
<p>Siehst du, das hast du davon pumuckl. Jetzt müssen wir den Leuten och erklären, dass dies bei einem <code>operator -&gt;</code> automatisch passiert. Solange der <code>operator -&gt;</code> keinen Zeiger zurückgibt, wird von dem Objekt, welches zurückgegeben wurde, wieder der <code>operator -&gt;</code> aufgerufen, bis entweder ein Zeiger zurückkommt oder kein <code>operator -&gt;</code> mehr überladen ist. Steht irgendwo im Standard, bin zu faul die genaue Stelle rauszusuchen. Kannst aber gerne selber testen <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>Steht übrigens auch in diesem Artikel:<br />
<a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20(Teil%201)" rel="nofollow">http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20(Teil%201)</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699674</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 22 Apr 2009 13:13:56 GMT</pubDate></item><item><title><![CDATA[Reply to iterator in den Typ umwandeln? on Wed, 22 Apr 2009 13:22:04 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Uch hab meinen Post nochmal überarbeitet. <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/1699677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699677</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 22 Apr 2009 13:22:04 GMT</pubDate></item></channel></rss>