<?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 Map: Direkter Zugriff per Iterator?]]></title><description><![CDATA[<p>Hi,</p>
<p>folgendes Szenario:</p>
<pre><code class="language-cpp">class ttest {
public: int value;
		void setValue(int val) {
			value = val;
		}
};

int main()
{
	map&lt;string, ttest&gt; testmap;
	map&lt;string, ttest&gt;::const_iterator iter;

	ttest x;
	x.setValue(1);
	testmap[&quot;a&quot;] = x;

	for(iter=testmap.begin(); iter!=testmap.end(); iter++) {
		((ttest)iter-&gt;second).setValue(23);
	}
}
</code></pre>
<p>Warum ist nach Abbarbeitung der Iteratorschleife testmap[&quot;a&quot;].value immer noch 1? Habe ich über den Iterator nur lesenden Zugriff auf die Objekte in der Map? Oder bekomme ich per ((ttest)iter-&gt;second) nur eine lokale Kopie des Objektes?<br />
Wie kann ich denn direkt das Objekt an der Stelle iter-&gt;second manipulieren?</p>
<p>Gruß, Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/162922/stl-map-direkter-zugriff-per-iterator</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 21:45:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/162922.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Oct 2006 12:59:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL Map: Direkter Zugriff per Iterator? on Tue, 24 Oct 2006 12:59:46 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>folgendes Szenario:</p>
<pre><code class="language-cpp">class ttest {
public: int value;
		void setValue(int val) {
			value = val;
		}
};

int main()
{
	map&lt;string, ttest&gt; testmap;
	map&lt;string, ttest&gt;::const_iterator iter;

	ttest x;
	x.setValue(1);
	testmap[&quot;a&quot;] = x;

	for(iter=testmap.begin(); iter!=testmap.end(); iter++) {
		((ttest)iter-&gt;second).setValue(23);
	}
}
</code></pre>
<p>Warum ist nach Abbarbeitung der Iteratorschleife testmap[&quot;a&quot;].value immer noch 1? Habe ich über den Iterator nur lesenden Zugriff auf die Objekte in der Map? Oder bekomme ich per ((ttest)iter-&gt;second) nur eine lokale Kopie des Objektes?<br />
Wie kann ich denn direkt das Objekt an der Stelle iter-&gt;second manipulieren?</p>
<p>Gruß, Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160307</guid><dc:creator><![CDATA[Thomas++]]></dc:creator><pubDate>Tue, 24 Oct 2006 12:59:46 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map: Direkter Zugriff per Iterator? on Tue, 24 Oct 2006 13:06:53 GMT]]></title><description><![CDATA[<p>Ah, böser Fehler.<br />
So gehts besser:</p>
<pre><code class="language-cpp">(iter-&gt;second).setValue(23);
</code></pre>
<p>Ist schon bösartig, dass sich der Iterator klaglos auf eine beliebige Klasse casten lässt.</p>
<p>Trotzdem noch ne Frage, warum geht das nicht:</p>
<pre><code class="language-cpp">((ttest)(iter-&gt;second)).setValue(23);
</code></pre>
<p>bzw. warum wird der Wert nicht gesetzt?</p>
<p>Gruß, Thomas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160308</guid><dc:creator><![CDATA[Thomas++]]></dc:creator><pubDate>Tue, 24 Oct 2006 13:06:53 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map: Direkter Zugriff per Iterator? on Tue, 24 Oct 2006 13:17:21 GMT]]></title><description><![CDATA[<p>Weil du einen const_iterator verwendest.</p>
<p>Der cast ist unnötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160315</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Tue, 24 Oct 2006 13:17:21 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map: Direkter Zugriff per Iterator? on Tue, 24 Oct 2006 13:18:14 GMT]]></title><description><![CDATA[<p>Der Wert wird korrekt gesetzt.<br />
Du musst jedoch beachten, das Deine Map eine Kopie von x hält.</p>
<p>Ansonsten: Mit (&lt;klasse&gt;) sagst Du dem Compiler, das er einfach annehmen soll, das es Typ &lt;klasse&gt; ist. Du sagst also: Ich weiß was ich mache, tu es einfach!</p>
<p>Bösartig ist der C Style Cast (oder der , der diesen einsetzt).</p>
<p>Details siehe reinterpret_cast&lt;T&gt;();</p>
<p>Was Du vermutlich suchst wäre ein static_cast&lt;T&gt;():</p>
<pre><code>static_cast&lt;ttest&gt;(iter-&gt;second).setValue(23);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1160316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160316</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Tue, 24 Oct 2006 13:18:14 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map: Direkter Zugriff per Iterator? on Tue, 24 Oct 2006 13:20:51 GMT]]></title><description><![CDATA[<p>Thomas++ schrieb:</p>
<blockquote>
<p>Ist schon bösartig, dass sich der Iterator klaglos auf eine beliebige Klasse casten lässt.</p>
</blockquote>
<p>Wäre bösartig, wenn das ginge, ja. Ist hier aber nicht so, du castest den Gesamtausdruck iter-&gt;second. Der hat eigentlich den Typ ttest&amp;, und das wär auch gut so. Wenn du das nach ttest castest, machst du eigentlich dasselbe wie</p>
<pre><code>ttest(iter-&gt;second);
</code></pre>
<p>du erzeugst also eine temporäre Kopie des Objektes, auf das iter-&gt;second verweist. Diese Kopie veränderst du durch setValue, das Original bleibt unbehelligt.</p>
<p>Ich würd jetzt gern noch wissen, wie du überhaupt darauf kommst, hier casten zu müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160321</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 24 Oct 2006 13:20:51 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map: Direkter Zugriff per Iterator? on Tue, 24 Oct 2006 13:38:20 GMT]]></title><description><![CDATA[<blockquote>
<p>Wäre bösartig, wenn das ginge, ja. Ist hier aber nicht so, du castest den Gesamtausdruck iter-&gt;second.</p>
</blockquote>
<p>Ich dachte, ein Cast ist immer stärker bindend, also dass (typ)iter-&gt;second daselbe ist wie ((typ)iter)-&gt;second. Ist wohl doch nicht so?</p>
<blockquote>
<p>Ich würd jetzt gern noch wissen, wie du überhaupt darauf kommst, hier casten zu müssen.</p>
</blockquote>
<p>Bin ich von Java so gewöhnt, da ist mein Iterator meist vom Typ Object.</p>
<p>Ein C-Cast ist kein C++-Cast, wieder was gelernt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<p>Gruß, Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160331</guid><dc:creator><![CDATA[Thomas++]]></dc:creator><pubDate>Tue, 24 Oct 2006 13:38:20 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map: Direkter Zugriff per Iterator? on Tue, 24 Oct 2006 13:57:19 GMT]]></title><description><![CDATA[<p>Thomas++ schrieb:</p>
<blockquote>
<p>...((typ)iter)-&gt;second. ...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> DAS wäre ja noch schlimmer !<br />
Damit würdest Du also einen map::const_iterator auf ttest casten (und ttest hat bestimmt weder Pointertyp (wg. &quot;-&gt;&quot;) und wohl auch kein second())....</p>
<p>Basher hat erklärt, dass Du hier gar nicht &quot;wirklich&quot; castest, sondern einfach ein neues (temporäres) Objekt anlegst...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1160341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160341</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 24 Oct 2006 13:57:19 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map: Direkter Zugriff per Iterator? on Wed, 25 Oct 2006 09:15:30 GMT]]></title><description><![CDATA[<p>Thomas++ schrieb:</p>
<blockquote>
<p>Ich dachte, ein Cast ist immer stärker bindend, also dass (typ)iter-&gt;second daselbe ist wie ((typ)iter)-&gt;second. Ist wohl doch nicht so?<br />
[...]<br />
Bin ich von Java so gewöhnt, da ist mein Iterator meist vom Typ Object.</p>
</blockquote>
<p>Tja was soll man da sagen außer: Lern C++ <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/1160843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1160843</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 25 Oct 2006 09:15:30 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map: Direkter Zugriff per Iterator? on Wed, 25 Oct 2006 19:29:47 GMT]]></title><description><![CDATA[<p>Ja genau, das Problem ist dass ein &quot;&amp;&quot; zwischen &quot;ttest&quot; und &quot;)&quot; fehlt.<br />
(Abgesehen von den ganzen anderen Problemen mit dem Code)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161422</guid><dc:creator><![CDATA[Plotzenhotz]]></dc:creator><pubDate>Wed, 25 Oct 2006 19:29:47 GMT</pubDate></item></channel></rss>