<?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 als Referenz? Und const oder const_iterator?]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich möchte ein Element eines Containers an eine Funktion übergeben. Habe die STL noch nicht so viel benutzt, deshalb stellen sich mir da ein paar Fragen:</p>
<p>- Darf man eine Referenz auf einen Iterator übergeben? Soll man das sogar tun? Würde eine Kopie nicht viel kosten?</p>
<p>- Wenn das Element nicht verändert werden soll, soll ich dann eine Referenz auf einen konstanten Iterator übergeben? Oder const_iterator verwenden?</p>
<p>- Oder geht es auch, einfach const xxx::iterator zu schreiben, also ohne Referenz? Oder eine Referenz auf einen const_iterator?</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/252048/iterator-als-referenz-und-const-oder-const_iterator</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 04:22:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/252048.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Oct 2009 23:17:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Tue, 13 Oct 2009 23:17:02 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich möchte ein Element eines Containers an eine Funktion übergeben. Habe die STL noch nicht so viel benutzt, deshalb stellen sich mir da ein paar Fragen:</p>
<p>- Darf man eine Referenz auf einen Iterator übergeben? Soll man das sogar tun? Würde eine Kopie nicht viel kosten?</p>
<p>- Wenn das Element nicht verändert werden soll, soll ich dann eine Referenz auf einen konstanten Iterator übergeben? Oder const_iterator verwenden?</p>
<p>- Oder geht es auch, einfach const xxx::iterator zu schreiben, also ohne Referenz? Oder eine Referenz auf einen const_iterator?</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792296</guid><dc:creator><![CDATA[Blume]]></dc:creator><pubDate>Tue, 13 Oct 2009 23:17:02 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Tue, 13 Oct 2009 23:22:50 GMT]]></title><description><![CDATA[<p>Blume schrieb:</p>
<blockquote>
<p>Hi!</p>
<p>Ich möchte ein Element eines Containers an eine Funktion übergeben. Habe die STL noch nicht so viel benutzt, deshalb stellen sich mir da ein paar Fragen:</p>
<p>- Darf man eine Referenz auf einen Iterator übergeben? Soll man das sogar tun? Würde eine Kopie nicht viel kosten?</p>
</blockquote>
<p>Du darfst. Aber STL-Iteratoren isn ddrauf getrimmt, schnell kopiert werden zu können, Kopie ist angemessener.</p>
<blockquote>
<p>- Wenn das Element nicht verändert werden soll, soll ich dann eine Referenz auf einen konstanten Iterator übergeben? Oder const_iterator verwenden?</p>
</blockquote>
<p>Äh, hatte ich noch nicht. const_iterator klingt lecker.</p>
<blockquote>
<p>- Oder geht es auch, einfach const xxx::iterator zu schreiben, also ohne Referenz? Oder eine Referenz auf einen const_iterator?</p>
</blockquote>
<p>const xxx::iterator wäre ja nur ein konstanter iteartor auf ein nicht konstantes objekt, wenn ich mir das recht zusammenreime.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792297</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 13 Oct 2009 23:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Tue, 13 Oct 2009 23:46:26 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">const bool HasSameEdge(const typename std::vector&lt;T&gt;::iterator &amp;vec1It, const typename std::vector&lt;T&gt;::iterator &amp;vec2It) const
</code></pre>
<p>Meinste sowas? Ja, dass geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792300</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Tue, 13 Oct 2009 23:46:26 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Wed, 14 Oct 2009 00:27:48 GMT]]></title><description><![CDATA[<p>Aber per Referenz wäre ja doch schneller als per Kopie, nicht?<br />
Dann wäre wohl das beste eine Referenz auf einen const_iterator.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792304</guid><dc:creator><![CDATA[Blume]]></dc:creator><pubDate>Wed, 14 Oct 2009 00:27:48 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Wed, 14 Oct 2009 00:30:20 GMT]]></title><description><![CDATA[<p>Also ob das schneller ist, naja...<br />
Und ja, sollte auch gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792305</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Wed, 14 Oct 2009 00:30:20 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Wed, 14 Oct 2009 00:35:34 GMT]]></title><description><![CDATA[<p>Blume schrieb:</p>
<blockquote>
<p>Aber per Referenz wäre ja doch schneller als per Kopie, nicht?</p>
</blockquote>
<p>Ähm, neee.<br />
Nehmen wir mal einen vector&lt;int&gt;::iterator</p>
<pre><code class="language-cpp">struct iterator
{
  int* data;
  iterator&amp; operator++(){
     ++data;
  }
  operator*(){
    return *data;
  }
  friend bool operator!=(iterator a,iterator b){
    return a.data!=b.data;
  }
  ...
}
</code></pre>
<p>oder einen<br />
list&lt;int&gt;::iterator</p>
<pre><code class="language-cpp">struct iterator
{
  list&lt;int&gt;::node* data;
  iterator&amp; operator++(){
     data=data-&gt;next;
  }
  operator*(){
    return data-&gt;value;
  }
  friend bool operator!=(iterator a,iterator b){
    return a.data!=b.data;
  }
  ...
}
</code></pre>
<p>die haben beie nur 4 bytes größe. kopieren ist da eine ganz nette idee.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792307</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 14 Oct 2009 00:35:34 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Wed, 14 Oct 2009 00:39:23 GMT]]></title><description><![CDATA[<p>Hmm, bei mir sizeof(vector&lt;int&gt;::iterator) = 12.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792308</guid><dc:creator><![CDATA[Blume]]></dc:creator><pubDate>Wed, 14 Oct 2009 00:39:23 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Wed, 14 Oct 2009 00:52:17 GMT]]></title><description><![CDATA[<p>Blume schrieb:</p>
<blockquote>
<p>Hmm, bei mir sizeof(vector&lt;int&gt;::iterator) = 12.</p>
</blockquote>
<p>mach mal die debug-prüfungen aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792310</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 14 Oct 2009 00:52:17 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Wed, 14 Oct 2009 01:00:33 GMT]]></title><description><![CDATA[<p>Äh, sorry, wenig Ahnung.<br />
Im Release-Build sind es noch 8 Bytes.</p>
<p>Dann habe ich noch &quot;Debug Information Format&quot; auf &quot;Disabled&quot; und &quot;Generate Debug Info&quot; auf &quot;No&quot; gestellt (Visual Studio 2008), etwas anderes hab ich nicht gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792312</guid><dc:creator><![CDATA[Blume]]></dc:creator><pubDate>Wed, 14 Oct 2009 01:00:33 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Wed, 14 Oct 2009 01:27:38 GMT]]></title><description><![CDATA[<p>Und warum kostet eine Referenz eigentlich mehr/gleich viel wie eine Kopie, oder warum überhaupt etwas?<br />
Könnte doch vom Compiler völlig wegoptimiert werden, nicht?<br />
Geht ja im C++ Code nur um die Sichtbarkeit der Variable, also dass ein Zugriff dort stattfindet, wo die Variable nicht bekannt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792315</guid><dc:creator><![CDATA[Blume]]></dc:creator><pubDate>Wed, 14 Oct 2009 01:27:38 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Wed, 14 Oct 2009 05:41:45 GMT]]></title><description><![CDATA[<p>Blume schrieb:</p>
<blockquote>
<p>Und warum kostet eine Referenz eigentlich mehr/gleich viel wie eine Kopie, oder warum überhaupt etwas?<br />
Könnte doch vom Compiler völlig wegoptimiert werden, nicht?<br />
Geht ja im C++ Code nur um die Sichtbarkeit der Variable, also dass ein Zugriff dort stattfindet, wo die Variable nicht bekannt ist.</p>
</blockquote>
<p>Referenzen können nicht immer wegoptimiert werden, z.B. wenn sie viel herumgereicht werden. Meistens sind sie intern nicht viel anderes als Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792331</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 14 Oct 2009 05:41:45 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Wed, 14 Oct 2009 06:51:10 GMT]]></title><description><![CDATA[<p>Blume schrieb:</p>
<blockquote>
<p>Ich möchte ein Element eines Containers an eine Funktion übergeben.</p>
</blockquote>
<p>Wenn es nur ein Element ist, übergib nur dieses eine Element per Referenz oder Kopie - in diesem Falle ist es völlig irrelevant, ob das Element in einem Container steckt oder nicht und es gibt keinen Grund, den Aufrufer hier zu irgendetwas zu zwingen.</p>
<p>Soll mehrere Elemente als Teil einer Sequenz übergeben werden, wirst du ohnehin eine Kopie des Iterators benötigen, um über diese Elemente zu iterieren, dann kann die Kopie genauso gut gleich beim Funktionsaufruf gemacht werden - das ist zudem effizienter, weil wir dabei ggf. von RVO profitieren können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792343</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 14 Oct 2009 06:51:10 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Wed, 14 Oct 2009 09:33:44 GMT]]></title><description><![CDATA[<p>Blume schrieb:</p>
<blockquote>
<p>Äh, sorry, wenig Ahnung.<br />
Im Release-Build sind es noch 8 Bytes.</p>
<p>Dann habe ich noch &quot;Debug Information Format&quot; auf &quot;Disabled&quot; und &quot;Generate Debug Info&quot; auf &quot;No&quot; gestellt (Visual Studio 2008), etwas anderes hab ich nicht gefunden.</p>
</blockquote>
<p>Verstehe ich nicht. Wozu nimmt der zwei Zeiger statt einem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792416</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 14 Oct 2009 09:33:44 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Wed, 14 Oct 2009 10:08:53 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Blume schrieb:</p>
<blockquote>
<p>Äh, sorry, wenig Ahnung.<br />
Im Release-Build sind es noch 8 Bytes.</p>
<p>Dann habe ich noch &quot;Debug Information Format&quot; auf &quot;Disabled&quot; und &quot;Generate Debug Info&quot; auf &quot;No&quot; gestellt (Visual Studio 2008), etwas anderes hab ich nicht gefunden.</p>
</blockquote>
<p>Verstehe ich nicht. Wozu nimmt der zwei Zeiger statt einem?</p>
</blockquote>
<p>Weil es ein checked iterator ist. Es fehlt noch ein</p>
<pre><code class="language-cpp">#define _SECURE_SCL 0
</code></pre>
<p>zweckmäßigerweise macht man das über die Projekteinstellungen, also zusätzlich _SECURE_SCL=0 bei den Präprozessorsymbolen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792430</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 14 Oct 2009 10:08:53 GMT</pubDate></item><item><title><![CDATA[Reply to iterator als Referenz? Und const oder const_iterator? on Wed, 14 Oct 2009 13:34:47 GMT]]></title><description><![CDATA[<p>Oh.. ja, stimmt.<br />
In meinem Fall benötige ich es eh nur, um in der Funktion über den Iterator auf die Methoden des Objekts zuzugreifen.<br />
Dann werde ich also beim Aufruf den Iterator dereferenzieren und als Parameter der Funktion kommt ein &quot;const ClassType&amp; classType&quot; hin.</p>
<p>Danke nochmals.<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792570</guid><dc:creator><![CDATA[Blume]]></dc:creator><pubDate>Wed, 14 Oct 2009 13:34:47 GMT</pubDate></item></channel></rss>