<?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[stl reference in iterator wandeln]]></title><description><![CDATA[<p>Hallo</p>
<p>Ist es möglich eine reference in einen iterator zu wandeln? Wenn ja, wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276096/stl-reference-in-iterator-wandeln</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 13:30:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276096.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Oct 2010 05:27:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to stl reference in iterator wandeln on Wed, 27 Oct 2010 05:27:58 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ist es möglich eine reference in einen iterator zu wandeln? Wenn ja, wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971206</guid><dc:creator><![CDATA[sibilly]]></dc:creator><pubDate>Wed, 27 Oct 2010 05:27:58 GMT</pubDate></item><item><title><![CDATA[Reply to stl reference in iterator wandeln on Wed, 27 Oct 2010 06:07:28 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-100590.html" rel="nofollow">Martin Richter</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-1.html" rel="nofollow">MFC (Visual C++)</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971216</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Wed, 27 Oct 2010 06:07:28 GMT</pubDate></item><item><title><![CDATA[Reply to stl reference in iterator wandeln on Wed, 27 Oct 2010 08:13:38 GMT]]></title><description><![CDATA[<p>sibilly schrieb:</p>
<blockquote>
<p>Ist es möglich eine reference in einen iterator zu wandeln? Wenn ja, wie?</p>
</blockquote>
<p>Die Standardcontainer bieten so ein Feature nicht direkt an. Aber je nach Container, könnte man sich da etwas überlegen. Beispielsweise garantiert ein std::vector, dass die Elemente alle hintereinander im Speicher liegen. Dann könnte man es so machen:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; v = ...;
int&amp; ref = v[3];
std::vector&lt;int&gt;::iterator i = v.begin()+(&amp;ref-&amp;*v.begin());
</code></pre>
<p>Das geht in konstanter Zeit.</p>
<p>Bei einer std::deque geht das nicht mehr. Da müsstest Du std::find_if mit einem Prädikat benutzen, welches die Adressen der Objekte vergleicht. Im schlimmsten Fall, durchläufst Du dann die komplette Sequenz.</p>
<p>Bei den assoziativen Containern kannst Du einfach wieder nach dem Schlüssel suchen und bekommt einen Iterator. Das kostet amortisiert O(log n) Zeit für einen Container, der n Elemente speichert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971262</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 27 Oct 2010 08:13:38 GMT</pubDate></item><item><title><![CDATA[Reply to stl reference in iterator wandeln on Wed, 27 Oct 2010 11:28:22 GMT]]></title><description><![CDATA[<p>Ok<br />
Aber das wäre ja dann einfacher:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; v = ...;
std::vector&lt;int&gt;::iterator i = v.begin() + pos - 1;
</code></pre>
<p>Oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971373</guid><dc:creator><![CDATA[sibilly]]></dc:creator><pubDate>Wed, 27 Oct 2010 11:28:22 GMT</pubDate></item><item><title><![CDATA[Reply to stl reference in iterator wandeln on Wed, 27 Oct 2010 11:35:12 GMT]]></title><description><![CDATA[<p>sibilly schrieb:</p>
<blockquote>
<p>Ok<br />
Aber das wäre ja dann einfacher:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; v = ...;
std::vector&lt;int&gt;::iterator i = v.begin() + pos - 1;
</code></pre>
<p>Oder?</p>
</blockquote>
<p>Wie kommst du auf pos?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971377</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 27 Oct 2010 11:35:12 GMT</pubDate></item><item><title><![CDATA[Reply to stl reference in iterator wandeln on Wed, 27 Oct 2010 11:42:14 GMT]]></title><description><![CDATA[<p>pos wäre die Stelle von der ich den Wert will also um das Beispiel von krümelkacker aufzugreifen:</p>
<pre><code class="language-cpp">int&amp; ref = v[3];
</code></pre>
<p>wäre dann pos = 3</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971381</guid><dc:creator><![CDATA[sibilly]]></dc:creator><pubDate>Wed, 27 Oct 2010 11:42:14 GMT</pubDate></item><item><title><![CDATA[Reply to stl reference in iterator wandeln on Wed, 27 Oct 2010 12:15:23 GMT]]></title><description><![CDATA[<p>Wenn du eh die Position hast bräuchtest du die Referenz doch garnicht (typischer Fall von &quot;frage WAS du erreichen willst, nicht WIE du es erreichen willst&quot; - siehe Link in meiner Signatur)<br />
Was du erreichen willst geht am Einfachsten und Allgemeinsten wie folgt:</p>
<pre><code class="language-cpp">//Container_t sei der Typ des Containers, cont der Container selber
Container_t::iterator iter = cont.begin(); //oder const_iterator, wenn du das Ziel nicht verändern willst
std::advance(iter, pos);
</code></pre>
<p>std::advance verwendet für Randomaccess-Iteratoren (vector, deque, tr1::array) einfach <code>iter += pos</code> , und für alle anderen Iteratoren einfach pos-mal <code>iter++</code> . Das -1 in deinem Code oben ist übrigens murks, überleg mal was bei pos=0 pasiert <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/1971409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971409</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 27 Oct 2010 12:15:23 GMT</pubDate></item></channel></rss>