<?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[Variabler Vektor]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich spiele gerade mal wieder ein bischen rum und versuche mir einen variablen Vektor (Mathematik) zu schreiben. Hier mal was ich bisher habe:</p>
<pre><code class="language-cpp">template&lt;class Type, int Number&gt;
class Vector
{
public:
  Vector(){};
  Vector(Type data[Number])
  {
    for (int i = 0; i &lt; Number; ++i )
    {
      itsData[i] = data[i];
    }
  }

  const Type&amp; at(int i) const { return itsData[i]; }

  void operator+= (const Vector&lt;Type, Number&gt;&amp; v)
  {
    for (int i = 0; i &lt; Number; ++i)
    {
      itsData[i] += v.itsData[i];
    }
  }

  void operator-= (const Vector&lt;Type, Number&gt;&amp; v)
  {
    for (int i = 0; i &lt; Number; ++i)
    {
      itsData[i] -= v.itsData[i];
    }
  }

private:
  Type itsData[Number];
};
</code></pre>
<p>Bin damit aber irgendwie noch nicht so ganz zufrieden, insbesondere mit dem Konstruktor. Ich weiß nicht so genau wie man eine Zuweisung effizient lösen könnte. Auch mit dem Addieren und Subtrahieren bin ich nicht zufrieden, wie könnte ich z.B. nur Additionen zulassen bei denen die Vektoren die gleiche Anzahl Spalten/Zeilen haben? Kann mir von Euch jemand vielleicht ein wenig auf die Sprünge helfen? Vielen Dank schon mal.</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/182306/variabler-vektor</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 22:33:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/182306.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 May 2007 15:01:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variabler Vektor on Wed, 23 May 2007 15:01:34 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich spiele gerade mal wieder ein bischen rum und versuche mir einen variablen Vektor (Mathematik) zu schreiben. Hier mal was ich bisher habe:</p>
<pre><code class="language-cpp">template&lt;class Type, int Number&gt;
class Vector
{
public:
  Vector(){};
  Vector(Type data[Number])
  {
    for (int i = 0; i &lt; Number; ++i )
    {
      itsData[i] = data[i];
    }
  }

  const Type&amp; at(int i) const { return itsData[i]; }

  void operator+= (const Vector&lt;Type, Number&gt;&amp; v)
  {
    for (int i = 0; i &lt; Number; ++i)
    {
      itsData[i] += v.itsData[i];
    }
  }

  void operator-= (const Vector&lt;Type, Number&gt;&amp; v)
  {
    for (int i = 0; i &lt; Number; ++i)
    {
      itsData[i] -= v.itsData[i];
    }
  }

private:
  Type itsData[Number];
};
</code></pre>
<p>Bin damit aber irgendwie noch nicht so ganz zufrieden, insbesondere mit dem Konstruktor. Ich weiß nicht so genau wie man eine Zuweisung effizient lösen könnte. Auch mit dem Addieren und Subtrahieren bin ich nicht zufrieden, wie könnte ich z.B. nur Additionen zulassen bei denen die Vektoren die gleiche Anzahl Spalten/Zeilen haben? Kann mir von Euch jemand vielleicht ein wenig auf die Sprünge helfen? Vielen Dank schon mal.</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1290803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1290803</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Wed, 23 May 2007 15:01:34 GMT</pubDate></item><item><title><![CDATA[Reply to Variabler Vektor on Wed, 23 May 2007 15:07:40 GMT]]></title><description><![CDATA[<p>die Addition so wie du sie hast, läuft doch nur mit vektoren die gleichen typs (==gleicher datentyp und anzahl zeilen). Andere Vektoren können nicht in Vektor&lt;Type, Number&gt; konvertiert werden. Den Konstrktor könntest du mit std::copy machen. Wenn du da allerdings objekte hast die viel speicher benötigen wird das Kopieren ne weile dauern. Kannste aber nicht ändern, denn die Objekte müssen ja auch im speicher des Vektors sein.</p>
<pre><code class="language-cpp">Vektor::Vektor(Type data[Number])
{
  std::copy(data, data+Number, itsdata);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1290807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1290807</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Wed, 23 May 2007 15:07:40 GMT</pubDate></item><item><title><![CDATA[Reply to Variabler Vektor on Wed, 23 May 2007 15:16:43 GMT]]></title><description><![CDATA[<p>Was ich gerne machen möchte, ist z.B. sowas</p>
<pre><code class="language-cpp">Vector&lt;int, 3&gt; myVector(1, 1, 1);
</code></pre>
<p>. Weiß aber nicht wie ich das umgesetzt bekomme.</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1290813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1290813</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Wed, 23 May 2007 15:16:43 GMT</pubDate></item><item><title><![CDATA[Reply to Variabler Vektor on Wed, 23 May 2007 15:54:33 GMT]]></title><description><![CDATA[<p>a) Soweit ich weiß, gibts ne Möglichkeit, Funktionen mit variabler Parameterzahl zu definieren:</p>
<pre><code class="language-cpp">func(int i1, ...);
</code></pre>
<p>oder so ähnlich. Müsstest mal nachschauen, wie das umzusetzen ist. Allerdings kannst du so nicht überprüfen, ob der User die richtige Anzahl an Parametern angegeben hat (ggf. einfach abschneiden oder mit Nullen auffüllen). Ich bin mir außerdem nicht sicher, ob sowas für Konstruktoren erlaubt ist.</p>
<p>b) Spezialisiere das Template für sagen wir mal Number &lt;=10, da es für größere Zahlen immer unwahrscheinlicher wird, dass da jemand jede einzelne Komponenten von Hand aufzählen wird.<br />
Die 10 Spezialisierungen lassen sich denke ich mal lässig über ein kleines Skript ausführen, das sie schreibt. (Oder du machst es per Copy&amp;Paste, dann wünsche ich allerdings viel Spaß, wenn du an dem Konstruktor mal was entscheidendes ändern willst...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1290854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1290854</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 23 May 2007 15:54:33 GMT</pubDate></item><item><title><![CDATA[Reply to Variabler Vektor on Wed, 23 May 2007 16:39:51 GMT]]></title><description><![CDATA[<p>uh... das so zu haben ist schwer... mit den neuen Sequence-konstruktoren in c++0x ginge das wohl, aber so...</p>
<p>vielleicht kann man da mit metaprogrammierung was machen? keine Ahnung. Aber du kannst zB versuchen mit boost::assign einen std::vector mit dem inhalt zu erstellen und den dann an den konstruktor zu übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1290895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1290895</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Wed, 23 May 2007 16:39:51 GMT</pubDate></item><item><title><![CDATA[Reply to Variabler Vektor on Wed, 23 May 2007 16:55:58 GMT]]></title><description><![CDATA[<p>Es macht meist Sinn Vektoren für Dimensionen bis 4 zu spezialisieren.<br />
Dann musst du bloss noch gucken dass alle Funktionen der nicht spezialisierten Version (&gt;4 Dimensionen) auch in den Spezialisierungen &lt;= 4 Dimensionen vorhanden sind.<br />
Somit ist der Vektor generisch verwendbar (über das immer vorhandene Subset der nicht spezialisierten Version), aber man kann in den &quot;üblichen Fällen&quot; (eben &lt;= 4 Dim.) &quot;schön&quot; arbeiten, also z.B. die Werte alle im ctor angeben etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1290912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1290912</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 23 May 2007 16:55:58 GMT</pubDate></item><item><title><![CDATA[Reply to Variabler Vektor on Sat, 26 May 2007 12:52:20 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6079">@Pacosys</a>: Ein komplettes Beispiel ist hier<br />
<a href="http://www.oop-mit-cpp.de/cppbuch/k9/vektor/" rel="nofollow">http://www.oop-mit-cpp.de/cppbuch/k9/vektor/</a><br />
im Zusammenwirken mit<br />
<a href="http://www.oop-mit-cpp.de/cppbuch/k9/mathvek/" rel="nofollow">http://www.oop-mit-cpp.de/cppbuch/k9/mathvek/</a><br />
zu finden. Wie es funktioniert, kann man in<br />
<a href="http://www.oop-mit-cpp.de/kap9.pdf" rel="nofollow">http://www.oop-mit-cpp.de/kap9.pdf</a>, Abschnitt 9.2 sehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1292644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292644</guid><dc:creator><![CDATA[UBr]]></dc:creator><pubDate>Sat, 26 May 2007 12:52:20 GMT</pubDate></item></channel></rss>