<?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[Funktion verändert maps ohne (offensichtlichen) Zugriff darauf]]></title><description><![CDATA[<p>Hallo,<br />
ich arbeite an einem divide &amp; conquer Algorithmus und habe dabei das folgende Problem:<br />
Ich habe eine eigene Klasse EDGE und die zwei Maps</p>
<pre><code class="language-cpp">map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; Q;
map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; cov;
</code></pre>
<p>Damit initialisiere ich vier neue Maps:</p>
<pre><code class="language-cpp">map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; Q_copy_1(Q);
map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; Q_copy_2(Q);
map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; cov_copy_1(cov);
map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; cov_copy_2(cov);
</code></pre>
<p>Dann rufe ich die Funktion</p>
<pre><code class="language-cpp">void shrink(list&lt;EDGE*&gt;&amp; shrink_edges, map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt;&amp; Q,
            map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt;&amp; cov);
</code></pre>
<p>mit Q_copy_1 und cov_copy_1 als Argumente 2 und 3 auf. Die Funktion verändert die beiden maps in gewisser Weise.</p>
<p>Komischerweise sind nach diesem Funktionsaufruf auch Q_copy_2 und cov_copy_2 auf die gleiche Weise verändert. Kann mir das jemand erklären?<br />
Danke für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/253531/funktion-verändert-maps-ohne-offensichtlichen-zugriff-darauf</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 16:56:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253531.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Nov 2009 18:59:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion verändert maps ohne (offensichtlichen) Zugriff darauf on Tue, 03 Nov 2009 18:59:56 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich arbeite an einem divide &amp; conquer Algorithmus und habe dabei das folgende Problem:<br />
Ich habe eine eigene Klasse EDGE und die zwei Maps</p>
<pre><code class="language-cpp">map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; Q;
map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; cov;
</code></pre>
<p>Damit initialisiere ich vier neue Maps:</p>
<pre><code class="language-cpp">map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; Q_copy_1(Q);
map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; Q_copy_2(Q);
map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; cov_copy_1(cov);
map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; cov_copy_2(cov);
</code></pre>
<p>Dann rufe ich die Funktion</p>
<pre><code class="language-cpp">void shrink(list&lt;EDGE*&gt;&amp; shrink_edges, map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt;&amp; Q,
            map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt;&amp; cov);
</code></pre>
<p>mit Q_copy_1 und cov_copy_1 als Argumente 2 und 3 auf. Die Funktion verändert die beiden maps in gewisser Weise.</p>
<p>Komischerweise sind nach diesem Funktionsaufruf auch Q_copy_2 und cov_copy_2 auf die gleiche Weise verändert. Kann mir das jemand erklären?<br />
Danke für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802835</guid><dc:creator><![CDATA[BeXXs]]></dc:creator><pubDate>Tue, 03 Nov 2009 18:59:56 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion verändert maps ohne (offensichtlichen) Zugriff darauf on Tue, 03 Nov 2009 19:18:45 GMT]]></title><description><![CDATA[<p>Also wenn ich mal raten darf (denn mehr lässt dein Code nicht zu):</p>
<p>Du erwartest möglicherweise, dass</p>
<pre><code class="language-cpp">map&lt;EDGE*, list&lt;EDGE*&gt;, EDGE_CMP&gt; Q_copy_1(Q);
</code></pre>
<p>eine sogenannte deep copy von Q macht. (Schlag das nach, wenn du nicht weißt, was das heißt). Es wird aber bloß eine shallow copy gemacht. Falls du dann in deiner Funktion Änderungen an den Objekten machst, auf die die Pointer in deiner map zeigen, dann veränderst du auch die Elemente auf die die Pointer in den anderen Maps zeigen, denn es sind die selben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802848</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 03 Nov 2009 19:18:45 GMT</pubDate></item></channel></rss>