<?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[Operatoren]]></title><description><![CDATA[<p>Hallo, das ist jetzt wahrscheinlich ne absolute Anfängerfrage:<br />
folgende Situation: ich muss mit Vektoren rechen , einfache Genauigkeit reicht mir,<br />
warum also nicht einfach alle Vektorraum-Operationen also Addition und Vielfache als Operatoren +,-,* und / für vector&lt;float&gt; basteln.</p>
<p>Meine Frage ist jetzt: Warum darf man sowas nicht machen??</p>
<pre><code class="language-cpp">std::vector&lt;float&gt; &amp; operator+(std::vector&lt;float&gt; &amp; u , std::vector&lt;float&gt; &amp; v ) {

	std::vector&lt;float&gt; * w = new std::vector&lt;float&gt;(u); // HIER
	if(u.size() == v.size()) {

	     for (unsigned int i = 0; i &lt; u.size(); ++i) {
			(*w)[i] += v[i];   // HIER
			}
		return (*w);// HIER
		}

		cout &lt;&lt; &quot;vectoraddition FAILED!! different sizes&quot; &lt;&lt; endl;
		return (*w);// und HIER
	}
</code></pre>
<p>Der Gedanke dabei war , dass im Gegensatz zu einer lokalen Variablen das kopieren entfallen würde da ich eine Referenz zurück geben kann.<br />
Gibt es ein andere Möglichkeit eine Referenz zurück zu geben wo ich nicht meinen ganzen Arbeitsspeicher zumülle oder ist einfach folgendes die richtige lösung:</p>
<pre><code class="language-cpp">std::vector&lt;float&gt;  operator+(std::vector&lt;float&gt;  u , std::vector&lt;float&gt;  v ) {

		std::vector&lt;float&gt;  w(u);
		if(u.size() == v.size()) {

			for (unsigned int i = 0; i &lt; u.size(); ++i) {
				w[i] += v[i];
			}
			return w;
		}

		cout &lt;&lt; &quot;vectoraddition FAILED!! different sizes&quot; &lt;&lt; endl;
		return w;

	}
</code></pre>
<p>Wobei ich mich dann frage warum es keine Lösung mit Referenzen gibt..<br />
besten Dank, simon</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294631/operatoren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 19:44:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294631.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Oct 2011 14:26:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatoren on Fri, 28 Oct 2011 14:26:50 GMT]]></title><description><![CDATA[<p>Hallo, das ist jetzt wahrscheinlich ne absolute Anfängerfrage:<br />
folgende Situation: ich muss mit Vektoren rechen , einfache Genauigkeit reicht mir,<br />
warum also nicht einfach alle Vektorraum-Operationen also Addition und Vielfache als Operatoren +,-,* und / für vector&lt;float&gt; basteln.</p>
<p>Meine Frage ist jetzt: Warum darf man sowas nicht machen??</p>
<pre><code class="language-cpp">std::vector&lt;float&gt; &amp; operator+(std::vector&lt;float&gt; &amp; u , std::vector&lt;float&gt; &amp; v ) {

	std::vector&lt;float&gt; * w = new std::vector&lt;float&gt;(u); // HIER
	if(u.size() == v.size()) {

	     for (unsigned int i = 0; i &lt; u.size(); ++i) {
			(*w)[i] += v[i];   // HIER
			}
		return (*w);// HIER
		}

		cout &lt;&lt; &quot;vectoraddition FAILED!! different sizes&quot; &lt;&lt; endl;
		return (*w);// und HIER
	}
</code></pre>
<p>Der Gedanke dabei war , dass im Gegensatz zu einer lokalen Variablen das kopieren entfallen würde da ich eine Referenz zurück geben kann.<br />
Gibt es ein andere Möglichkeit eine Referenz zurück zu geben wo ich nicht meinen ganzen Arbeitsspeicher zumülle oder ist einfach folgendes die richtige lösung:</p>
<pre><code class="language-cpp">std::vector&lt;float&gt;  operator+(std::vector&lt;float&gt;  u , std::vector&lt;float&gt;  v ) {

		std::vector&lt;float&gt;  w(u);
		if(u.size() == v.size()) {

			for (unsigned int i = 0; i &lt; u.size(); ++i) {
				w[i] += v[i];
			}
			return w;
		}

		cout &lt;&lt; &quot;vectoraddition FAILED!! different sizes&quot; &lt;&lt; endl;
		return w;

	}
</code></pre>
<p>Wobei ich mich dann frage warum es keine Lösung mit Referenzen gibt..<br />
besten Dank, simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137166</guid><dc:creator><![CDATA[M10n]]></dc:creator><pubDate>Fri, 28 Oct 2011 14:26:50 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Fri, 28 Oct 2011 14:31:25 GMT]]></title><description><![CDATA[<p>Die zweite Lösung ist korrekt, auch wenn du Exceptions werfen solltest statt mit cout was auszugeben.</p>
<blockquote>
<p>Wobei ich mich dann frage warum es keine Lösung mit Referenzen gibt..</p>
</blockquote>
<p>Referenzen müssen immer auf ein bestehendes Objekt verweisen. Durchaus sinnvoll, wenn ein Operator eines der Objekte verändert, da kann man einfach eine Referenz zurückgeben.</p>
<p>Der operator+ erzeugt aber neue Daten, von daher gibt man da auch ein frisches Objekt zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137168</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 28 Oct 2011 14:31:25 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Fri, 28 Oct 2011 14:32:25 GMT]]></title><description><![CDATA[<p>Alles klar, in diesem Fall wäre dann zb += der Kandidat für die Referenz, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137169</guid><dc:creator><![CDATA[M10n]]></dc:creator><pubDate>Fri, 28 Oct 2011 14:32:25 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Fri, 28 Oct 2011 14:36:52 GMT]]></title><description><![CDATA[<p>M10n schrieb:</p>
<blockquote>
<p>Alles klar, in diesem Fall wäre dann zb += der Kandidat für die Referenz, oder?</p>
</blockquote>
<p>Genau! <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/2137172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137172</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 28 Oct 2011 14:36:52 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Fri, 28 Oct 2011 15:02:36 GMT]]></title><description><![CDATA[<p>Mach dafür doch eine eigene Klasse, das ist kaum mehr Schreibarbeit, aber unendlich sauberer, was mittel- bis langfristig viel besser für dich ist. Dies hier ist &quot;Ein Supermark ist eine Wursttheke&quot;-Stil. Ein mathematischer Vektor und eine Vektor-Datenstruktur sind zwei verschiedene Konzepte. Auch wenn es ein paar klare Gemeinsamkeiten gibt (daher heißen sie ja auch gleich), so sind sie doch nicht gleich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137177</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 28 Oct 2011 15:02:36 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Fri, 28 Oct 2011 15:21:38 GMT]]></title><description><![CDATA[<p>Damit hatte ich auch angefangen,<br />
das wäre dann ein Wrapper für einen vector&lt;T&gt; oder? d.h. ich müsste sehr viele methoden weiterleiten, oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137181</guid><dc:creator><![CDATA[M10n]]></dc:creator><pubDate>Fri, 28 Oct 2011 15:21:38 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Fri, 28 Oct 2011 16:19:13 GMT]]></title><description><![CDATA[<p>Was genau brauchst du denn für Vektoren? Weißt du schon beim compilen, wie viele Dimensionen ein Vektor hat? Wenn ja würde ich einfach ein normales c-array wrappen (sonst std::vector).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137200</guid><dc:creator><![CDATA[GorbGorb]]></dc:creator><pubDate>Fri, 28 Oct 2011 16:19:13 GMT</pubDate></item><item><title><![CDATA[Reply to Operatoren on Fri, 28 Oct 2011 20:04:06 GMT]]></title><description><![CDATA[<p>M10n schrieb:</p>
<blockquote>
<p>Damit hatte ich auch angefangen,<br />
das wäre dann ein Wrapper für einen vector&lt;T&gt; oder? d.h. ich müsste sehr viele methoden weiterleiten, oder nicht?</p>
</blockquote>
<p>Irgendwie kann ich mir nicht vorstellen, dass ein Vektor im mathematischen Sinne sehr viele der Memberfunktionen von std::vector benötigt. Operator[] und vielleicht noch ein Konstruktor im C++11-Stil. Was willst du mehr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137301</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 28 Oct 2011 20:04:06 GMT</pubDate></item></channel></rss>