<?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[Parameter als Lösungsstellplatz in die Funktion reichen]]></title><description><![CDATA[<p>Servus,</p>
<p>ich habe gesehen, dass in einer Bibliothek eine Funktion nichts zurückgibt oder einen Fehlercode und eigentlich zwei Werte returnieren sollte, sagen wir die Standardabweichung und den Mittelwert zu einer Liste aus Werten.</p>
<p>Die Funktion sieht dann etwa so aus:<br />
void meineFunktion( vector&lt;double&gt; liste, double sd, double mean){...}</p>
<p>Ich will nun eine Funktion schreiben, die dieses System auch nutzt, aber statt mit double-Werten mit vector&lt;double&gt;; auf was muss ich da achten?</p>
<p>Als Parameter gebe ich eine Referenz an, dann wird nur ein Zeiger hinein gereicht und wenn im Aufrufer-Scope dann die Listen verwendet werden, dann sollte das ja auch klappen, denn beim Zugriff über den Variablennamen, sind die Werte ja auch da oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/291954/parameter-als-lösungsstellplatz-in-die-funktion-reichen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 08:28:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291954.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Aug 2011 19:56:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Parameter als Lösungsstellplatz in die Funktion reichen on Tue, 30 Aug 2011 19:56:00 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich habe gesehen, dass in einer Bibliothek eine Funktion nichts zurückgibt oder einen Fehlercode und eigentlich zwei Werte returnieren sollte, sagen wir die Standardabweichung und den Mittelwert zu einer Liste aus Werten.</p>
<p>Die Funktion sieht dann etwa so aus:<br />
void meineFunktion( vector&lt;double&gt; liste, double sd, double mean){...}</p>
<p>Ich will nun eine Funktion schreiben, die dieses System auch nutzt, aber statt mit double-Werten mit vector&lt;double&gt;; auf was muss ich da achten?</p>
<p>Als Parameter gebe ich eine Referenz an, dann wird nur ein Zeiger hinein gereicht und wenn im Aufrufer-Scope dann die Listen verwendet werden, dann sollte das ja auch klappen, denn beim Zugriff über den Variablennamen, sind die Werte ja auch da oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112661</guid><dc:creator><![CDATA[eigentlichJay1980]]></dc:creator><pubDate>Tue, 30 Aug 2011 19:56:00 GMT</pubDate></item><item><title><![CDATA[Reply to Parameter als Lösungsstellplatz in die Funktion reichen on Tue, 30 Aug 2011 20:01:26 GMT]]></title><description><![CDATA[<p>Hä? Verstehe Dein Anliegen nicht.</p>
<p>Vielleicht suchst Du sowas?</p>
<pre><code class="language-cpp">pair&lt;double,double&gt; berechneStandardabweichungUndMittelwert(vector&lt;double&gt; const&amp; daten)
</code></pre>
<p>oder (aber nicht so gern gesehen)</p>
<pre><code class="language-cpp">void berechneStandardabweichungUndMittelwert(vector&lt;double&gt; const&amp; daten, double&amp; standardabweichung, double&amp; mittelwert)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2112662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112662</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 30 Aug 2011 20:01:26 GMT</pubDate></item><item><title><![CDATA[Reply to Parameter als Lösungsstellplatz in die Funktion reichen on Tue, 30 Aug 2011 22:03:34 GMT]]></title><description><![CDATA[<p>Ich glaube er will</p>
<pre><code class="language-cpp">void Funkziaun(WasAuchImmer daten, vector&lt;double&gt;&amp; out_blah, vector&lt;double&gt;&amp; out_blubb);
</code></pre>
<p>machen, und von uns wissen, ob das so OK geht.</p>
<p>Ja, geht OK <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>
<blockquote>
<p>auf was muss ich da achten?</p>
</blockquote>
<p>Auf nix spezielles.</p>
<p>In dem oben skizzierten Fall werden &quot;out_blah&quot; und &quot;out_blubb&quot; sozusagen zu Alias-Namen für das, was der Aufrufer übergibt. Normale C++ Referenzen halt. D.h. das was du innerhalb der Funktion in diese &quot;Output-Parameter&quot; reintust, das steht auch nach dem Aufruf noch drin. Und der Aufrufer kann es dann verwenden.</p>
<p>Umgekehrt genau so: bei Beginn deiner Funktion steht auch das drin, was vor dem Aufruf drinstand.</p>
<p>D.h. du solltest entweder<br />
a) vom Aufrufer verlangen dass die übergebenen Vektoren vorher leer sein müssen (und das idealerweise noch mit assert() absichern) oder<br />
b) die übergebenen Vektoren in der Funktion erstmal selbst leer machen oder<br />
c) irgend ein anderes Verhalten für den Fall &quot;nicht-leere Vektoren übergeben&quot; definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112674</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 30 Aug 2011 22:03:34 GMT</pubDate></item><item><title><![CDATA[Reply to Parameter als Lösungsstellplatz in die Funktion reichen on Tue, 30 Aug 2011 22:10:34 GMT]]></title><description><![CDATA[<p>Ich finde das aber hässlich. Gerade wenns öfters im Code vorkommt als nur an einer Stelle mal ausnahmsweise oder als dieses Datenpaar gespeichert wird . Eher:</p>
<pre><code class="language-cpp">struct DataType/* oder class, was auch immer */
{
   std::vector&lt;double&gt; list1;
   std::vector&lt;double&gt; list2;
}

DataType foo()
{
   //blabla
}
</code></pre>
<p>Natürlich mit entsprechend besserer Namensgebung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112676</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 30 Aug 2011 22:10:34 GMT</pubDate></item><item><title><![CDATA[Reply to Parameter als Lösungsstellplatz in die Funktion reichen on Tue, 30 Aug 2011 22:29:58 GMT]]></title><description><![CDATA[<p>Ja, viele Wege führen nach Rom.</p>
<p>Wenn die Performance wurscht ist, dann ist die pair/tuple/struct Variante wahrscheinlich &quot;besser&quot;, weil &quot;schöner&quot;.<br />
Wenn die Performance kritisch ist, können Output-Parameter dennoch Sinn machen.</p>
<p>Auch mit Rvalue-Referenzen und Move-Magick bleibt noch, dass in der Funktion keine Vektoren zur Verfügung stehen, denen man den mittels move() den Speicher klauen könnte, und damit bei zwei Vektoren zumindest 2x &quot;new[]&quot; fällig ist (+ 2x &quot;delete[]&quot; später).</p>
<p>Mit Output-Parametern kann der Aufrufer dagegen die Vektoren &quot;recyclen&quot;, wobei diese den Speicher ja nicht freigeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112680</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 30 Aug 2011 22:29:58 GMT</pubDate></item></channel></rss>