<?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[Index Operator überladen]]></title><description><![CDATA[<p>Hi !!!</p>
<p>Ich würde gerne in meinem Programm den Index Operator überladen.<br />
Ich habe eine Matrix, die aus drei Vektoren besteht:</p>
<pre><code class="language-cpp">vector&lt;double&gt; val;
vector&lt;double&gt; col;
vector&lt;double&gt; row;
</code></pre>
<p>val steht für den Wert, col, steht für die Spalte und row steht für die Zeile (zu beachten ist, dass row immer sortiert ist).<br />
Eine Matrix wird dann wie folgt gespeichert:</p>
<pre><code>1 2 0
0 2 0
4 0 1
val: 1 2 2 4 1
col: 0 1 1 0 2
row: 0 0 1 2 2
</code></pre>
<p>Zugriff auf z.B. das Element A[2][0] soll folgendermaßen zugegriffen werden:<br />
Suche in row nach der 3. Die Zahl 3 ist an Positionen 3-4 vorhanden.<br />
Suche in col an den Positionen 3-4 die &quot;1&quot;. Falls gefunden, so gebe den Wert aus val, der an der gefundenen Position liegt. Falls nicht gefunden, so wird 0 ausgegeben.</p>
<p>Was ich bisher in der Literatur zum Überladen des Operators operator[] gefunden habe, bezog sich immer auf Speicherung der Matrix mit Array.</p>
<pre><code class="language-cpp">operator[](int index){...}
</code></pre>
<p>Da liegt mein Problem. Überall wird nur ein Index mit angegeben. Wie kann ich den Operator so überladen, dass ich ein Zugriff auf die wie oben gespeicherte Matrix habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144680/index-operator-überladen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 17:58:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144680.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Apr 2006 13:34:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Index Operator überladen on Thu, 20 Apr 2006 13:34:07 GMT]]></title><description><![CDATA[<p>Hi !!!</p>
<p>Ich würde gerne in meinem Programm den Index Operator überladen.<br />
Ich habe eine Matrix, die aus drei Vektoren besteht:</p>
<pre><code class="language-cpp">vector&lt;double&gt; val;
vector&lt;double&gt; col;
vector&lt;double&gt; row;
</code></pre>
<p>val steht für den Wert, col, steht für die Spalte und row steht für die Zeile (zu beachten ist, dass row immer sortiert ist).<br />
Eine Matrix wird dann wie folgt gespeichert:</p>
<pre><code>1 2 0
0 2 0
4 0 1
val: 1 2 2 4 1
col: 0 1 1 0 2
row: 0 0 1 2 2
</code></pre>
<p>Zugriff auf z.B. das Element A[2][0] soll folgendermaßen zugegriffen werden:<br />
Suche in row nach der 3. Die Zahl 3 ist an Positionen 3-4 vorhanden.<br />
Suche in col an den Positionen 3-4 die &quot;1&quot;. Falls gefunden, so gebe den Wert aus val, der an der gefundenen Position liegt. Falls nicht gefunden, so wird 0 ausgegeben.</p>
<p>Was ich bisher in der Literatur zum Überladen des Operators operator[] gefunden habe, bezog sich immer auf Speicherung der Matrix mit Array.</p>
<pre><code class="language-cpp">operator[](int index){...}
</code></pre>
<p>Da liegt mein Problem. Überall wird nur ein Index mit angegeben. Wie kann ich den Operator so überladen, dass ich ein Zugriff auf die wie oben gespeicherte Matrix habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041297</guid><dc:creator><![CDATA[bucada]]></dc:creator><pubDate>Thu, 20 Apr 2006 13:34:07 GMT</pubDate></item><item><title><![CDATA[Reply to Index Operator überladen on Thu, 20 Apr 2006 14:14:22 GMT]]></title><description><![CDATA[<p>Kann mich jetzt zwar gewaltig irren, aber ich würde ne Matrix so machen.</p>
<pre><code class="language-cpp">vector&lt;vector&lt;double&gt; &gt; Matrix;
</code></pre>
<p>dann musst du nicht mal den [] op überladen. Der funktioniert doch dann schon von Haus aus.</p>
<p>Wenn Du ihn denn noch überladen willst musst Dir klar sein, dass der erste Aufruf von [] ein objekt (oder Referenz) zurückliefern muss, das wiederum den [] op unterstützt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041325</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Thu, 20 Apr 2006 14:14:22 GMT</pubDate></item><item><title><![CDATA[Reply to Index Operator überladen on Thu, 20 Apr 2006 15:15:57 GMT]]></title><description><![CDATA[<p>Ja, so wie Du es schreibst ist eine ander Möglichkeit eine Matrix zu speichern. <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="😉"
    /> Doch das ist schon richtig so wie ich es oben angegeben habe. Die Matrix soll in dieser Art gespeichert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041371</guid><dc:creator><![CDATA[bucada]]></dc:creator><pubDate>Thu, 20 Apr 2006 15:15:57 GMT</pubDate></item><item><title><![CDATA[Reply to Index Operator überladen on Thu, 20 Apr 2006 15:38:11 GMT]]></title><description><![CDATA[<p>Diese Datenstruktur ist nicht gerade einfach zu handlen, finde ich.</p>
<p>Dann brauchst du ein Zwischenobjekt welches von der Matrix zurückgegeben wird.<br />
Zum Beispiel so:</p>
<pre><code class="language-cpp">class Matrix 
{
public:
   vector&lt;double&gt; val;
   vector&lt;double&gt; col;
   vector&lt;double&gt; row; 

   MetaObject operator[](int rowIndex)
   {
      return MetaObject(this, rowIndex);
   }
};

class MetaObject
{
public:
   MetaObject(Matrix* matrix, int row){...}
   double operator[](int colIndex)
   {
      return matrix-&gt;GetValue(row, colIndex); //so eine Funktion wird es ja geben
   }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1041382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041382</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Thu, 20 Apr 2006 15:38:11 GMT</pubDate></item><item><title><![CDATA[Reply to Index Operator überladen on Thu, 20 Apr 2006 16:00:26 GMT]]></title><description><![CDATA[<p>Hmm, ja das stimmt, das ist wirklich nicht einfach zu handhaben.<br />
Ich hatte sowas schon befürchtet. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Aber vielen Dank, ich werde versuchen das umzusetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041406</guid><dc:creator><![CDATA[bucada]]></dc:creator><pubDate>Thu, 20 Apr 2006 16:00:26 GMT</pubDate></item><item><title><![CDATA[Reply to Index Operator überladen on Thu, 20 Apr 2006 17:33:17 GMT]]></title><description><![CDATA[<p>So viele Layer wären mir bei ner Matrix zu viel des guten.<br />
Würde die versuchen so dünn zu halten wie möglich.<br />
Außerdem würde ich valarray und keinen vector nehmen, valarray ist der mathematische vektor und vector ist ja nur nen array.<br />
Wie wäre es mit operator() überladen, dem kannst mehrere Parameter verpassen und nen matrix( row, col ) sieht ja fast genauso schick aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041473</guid><dc:creator><![CDATA[Dr. Prof]]></dc:creator><pubDate>Thu, 20 Apr 2006 17:33:17 GMT</pubDate></item><item><title><![CDATA[Reply to Index Operator überladen on Thu, 20 Apr 2006 17:39:06 GMT]]></title><description><![CDATA[<p>Oh ja, stimmt, das ist eine gute Idee <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Das Überladen des operator() ist deutlich einfacher zu handhaben <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/1041478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041478</guid><dc:creator><![CDATA[bucada]]></dc:creator><pubDate>Thu, 20 Apr 2006 17:39:06 GMT</pubDate></item></channel></rss>