<?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[Problem mit Vektor* bzw. Datenstruktur fehlerhaft.]]></title><description><![CDATA[<p>Einen schönen guten Tag,</p>
<p>folgendes Problem beschäftigt mich nun schon eine Weile, vielleicht hat ja jemand die Muße mir zu helfen. Leider kann ich meiner Meinung nach, den &quot;Code-Schnipsel&quot; nicht weiter reduzieren..</p>
<p>Diese kleine Datenstruktur ist zwar lauffähig, macht aber leider nicht das, was sie soll.</p>
<p>Es sollen lediglich die Daten (s. Bspl.) gespeichert werden, und wenn ein Datensatz die gleichen x-/y-Werte hat (hier reicht eine Überprüfung des y-Wertes ind, soll die Variable <em>Anzahl</em> um eins erhöht werden. Leider funktioniert die Schleife im Konstruktor von <em>COuterMatrixData</em> (Zeile: 34 f.) nicht. An dieser Stelle soll eigentlich geschaut werden, ob der übergebene Datensatz bereits in dem Vector <em>m_InnerData</em> vorhanden ist, und wenn ja - soll die Variable Anzahl um eins erhöht werden.. Dafür überprüfe ich den x-Wert und anschließend in der Schleife jeden y-Wert im Vektor <em>m_InnerData</em>.</p>
<p><strong>Beispiel:</strong></p>
<p><em>Folgende Ausgabe liefert das Programm zur Zeit:</em></p>
<pre><code>3, 7, 1
45, 99, 1
19, 1, 1
3, 7, 1
</code></pre>
<p><em>Es <strong>sollte</strong> jedoch folgende Ausgabe liefern:</em></p>
<pre><code>3, 7, 2
45, 99, 1
19, 1, 1
</code></pre>
<p>Hier der Quellcode:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

class CInnerMatrixData {
    private:
        long m_Y;
        long m_Anzahl;
    public:
        CInnerMatrixData() {}
        ~CInnerMatrixData() {}
        CInnerMatrixData(long y, long anzahl) {
            m_Anzahl = anzahl;
            m_Y = y;
        }
        void setAnzahl(long a) { m_Anzahl = a; }
        void setY(long y) { m_Y = y; }
        long getAnzahl() { return m_Anzahl; }
        long getY() { return m_Y; }
};

class COuterMatrixData {
    private:
        long m_X;
    public:
        COuterMatrixData() {}
        ~COuterMatrixData() {}
        COuterMatrixData(long x, long y, long anzahl) {
            // Tempvariable, um zu merken, ob ein Datensatz in CInnerMatrixData bereits existiert.
            int temp = 0;

            // Voraussetzung: Gleicher x-Wert.
            if(this-&gt;getX() == x) {
                // Abbruchbedingung: Wenn Objekt mit gleichem y-Wert gefunden wurde und temp = 1 ist, bzw. wenn der Vektor am Ende angelangt ist.
                for(vector&lt;CInnerMatrixData*&gt;::iterator it = this-&gt;m_InnerData.begin(); temp != 1 &amp;&amp; it != this-&gt;m_InnerData.end(); it++) {
                    if(this-&gt;m_InnerData.empty()) {
                        // Wenn ein CInnerMatrixData Objekt mit gleichem y-Wert gefunden wurde, soll 'Anzahl' um eins inkrementiert werden.
                        if((*it)-&gt;getY() == y) {
                            (*it)-&gt;setAnzahl((*it)-&gt;getAnzahl() + 1);
                            // Objekt mit passendem y-Wert wurde gefunden und berarbeitet, demnach gleich nicht mehr neu anlegen!
                            temp = 1;
                        }
                    }
                }
            }
            // Nur durchführen, wenn kein passendes Onjekt gefunden wurde.
            if(temp == 0) {
                m_X = x;
                m_InnerData.push_back(new CInnerMatrixData(y, anzahl));
            }
        }
        long getX() { return m_X; }
        vector&lt;CInnerMatrixData*&gt; m_InnerData;
};

int main() {
    vector&lt;COuterMatrixData&gt; matrix;
    matrix.push_back(COuterMatrixData(3, 7, 1));
    matrix.push_back(COuterMatrixData(45, 99, 1));
    matrix.push_back(COuterMatrixData(19, 1, 1));

    // An dieser Stelle soll der Datensatz gefunden werden und die Anzahl um eins erhöht werden (Siehe Konstruktor in Zeile 34 f.).
    matrix.push_back(COuterMatrixData(3, 7, 1));

    for(vector&lt;COuterMatrixData&gt;::iterator it = matrix.begin(); it != matrix.end(); it++) {
        cout &lt;&lt; it-&gt;getX() &lt;&lt; &quot; &quot;;

        for(vector&lt;CInnerMatrixData*&gt;::iterator innerIt = it-&gt;m_InnerData.begin(); innerIt != it-&gt;m_InnerData.end(); innerIt++) {
            cout &lt;&lt; (*innerIt)-&gt;getY() &lt;&lt; &quot; &quot; &lt;&lt; (*innerIt)-&gt;getAnzahl() &lt;&lt; endl;
        }
    }

    return 0;
}
</code></pre>
<p>Woran kann das liegen?</p>
<p>Viele Dank und einen schönen Gruß,<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/163504/problem-mit-vektor-bzw-datenstruktur-fehlerhaft</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 04:20:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/163504.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Oct 2006 12:05:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Vektor* bzw. Datenstruktur fehlerhaft. on Mon, 30 Oct 2006 12:05:33 GMT]]></title><description><![CDATA[<p>Einen schönen guten Tag,</p>
<p>folgendes Problem beschäftigt mich nun schon eine Weile, vielleicht hat ja jemand die Muße mir zu helfen. Leider kann ich meiner Meinung nach, den &quot;Code-Schnipsel&quot; nicht weiter reduzieren..</p>
<p>Diese kleine Datenstruktur ist zwar lauffähig, macht aber leider nicht das, was sie soll.</p>
<p>Es sollen lediglich die Daten (s. Bspl.) gespeichert werden, und wenn ein Datensatz die gleichen x-/y-Werte hat (hier reicht eine Überprüfung des y-Wertes ind, soll die Variable <em>Anzahl</em> um eins erhöht werden. Leider funktioniert die Schleife im Konstruktor von <em>COuterMatrixData</em> (Zeile: 34 f.) nicht. An dieser Stelle soll eigentlich geschaut werden, ob der übergebene Datensatz bereits in dem Vector <em>m_InnerData</em> vorhanden ist, und wenn ja - soll die Variable Anzahl um eins erhöht werden.. Dafür überprüfe ich den x-Wert und anschließend in der Schleife jeden y-Wert im Vektor <em>m_InnerData</em>.</p>
<p><strong>Beispiel:</strong></p>
<p><em>Folgende Ausgabe liefert das Programm zur Zeit:</em></p>
<pre><code>3, 7, 1
45, 99, 1
19, 1, 1
3, 7, 1
</code></pre>
<p><em>Es <strong>sollte</strong> jedoch folgende Ausgabe liefern:</em></p>
<pre><code>3, 7, 2
45, 99, 1
19, 1, 1
</code></pre>
<p>Hier der Quellcode:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

class CInnerMatrixData {
    private:
        long m_Y;
        long m_Anzahl;
    public:
        CInnerMatrixData() {}
        ~CInnerMatrixData() {}
        CInnerMatrixData(long y, long anzahl) {
            m_Anzahl = anzahl;
            m_Y = y;
        }
        void setAnzahl(long a) { m_Anzahl = a; }
        void setY(long y) { m_Y = y; }
        long getAnzahl() { return m_Anzahl; }
        long getY() { return m_Y; }
};

class COuterMatrixData {
    private:
        long m_X;
    public:
        COuterMatrixData() {}
        ~COuterMatrixData() {}
        COuterMatrixData(long x, long y, long anzahl) {
            // Tempvariable, um zu merken, ob ein Datensatz in CInnerMatrixData bereits existiert.
            int temp = 0;

            // Voraussetzung: Gleicher x-Wert.
            if(this-&gt;getX() == x) {
                // Abbruchbedingung: Wenn Objekt mit gleichem y-Wert gefunden wurde und temp = 1 ist, bzw. wenn der Vektor am Ende angelangt ist.
                for(vector&lt;CInnerMatrixData*&gt;::iterator it = this-&gt;m_InnerData.begin(); temp != 1 &amp;&amp; it != this-&gt;m_InnerData.end(); it++) {
                    if(this-&gt;m_InnerData.empty()) {
                        // Wenn ein CInnerMatrixData Objekt mit gleichem y-Wert gefunden wurde, soll 'Anzahl' um eins inkrementiert werden.
                        if((*it)-&gt;getY() == y) {
                            (*it)-&gt;setAnzahl((*it)-&gt;getAnzahl() + 1);
                            // Objekt mit passendem y-Wert wurde gefunden und berarbeitet, demnach gleich nicht mehr neu anlegen!
                            temp = 1;
                        }
                    }
                }
            }
            // Nur durchführen, wenn kein passendes Onjekt gefunden wurde.
            if(temp == 0) {
                m_X = x;
                m_InnerData.push_back(new CInnerMatrixData(y, anzahl));
            }
        }
        long getX() { return m_X; }
        vector&lt;CInnerMatrixData*&gt; m_InnerData;
};

int main() {
    vector&lt;COuterMatrixData&gt; matrix;
    matrix.push_back(COuterMatrixData(3, 7, 1));
    matrix.push_back(COuterMatrixData(45, 99, 1));
    matrix.push_back(COuterMatrixData(19, 1, 1));

    // An dieser Stelle soll der Datensatz gefunden werden und die Anzahl um eins erhöht werden (Siehe Konstruktor in Zeile 34 f.).
    matrix.push_back(COuterMatrixData(3, 7, 1));

    for(vector&lt;COuterMatrixData&gt;::iterator it = matrix.begin(); it != matrix.end(); it++) {
        cout &lt;&lt; it-&gt;getX() &lt;&lt; &quot; &quot;;

        for(vector&lt;CInnerMatrixData*&gt;::iterator innerIt = it-&gt;m_InnerData.begin(); innerIt != it-&gt;m_InnerData.end(); innerIt++) {
            cout &lt;&lt; (*innerIt)-&gt;getY() &lt;&lt; &quot; &quot; &lt;&lt; (*innerIt)-&gt;getAnzahl() &lt;&lt; endl;
        }
    }

    return 0;
}
</code></pre>
<p>Woran kann das liegen?</p>
<p>Viele Dank und einen schönen Gruß,<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164414</guid><dc:creator><![CDATA[chrismichnich]]></dc:creator><pubDate>Mon, 30 Oct 2006 12:05:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vektor* bzw. Datenstruktur fehlerhaft. on Mon, 30 Oct 2006 12:12:11 GMT]]></title><description><![CDATA[<p>Jede OuterMatrix hat einen eigenen vector m_innerData, der im Konstruktor leer initialisiert wird. Und in diesem leeren vector kannst du auch nichts finden, also wird der neue Wert dort eingetragen.<br />
Und die Variable matrix ist ein blanker vector, die prüft auch nicht, ob du Duplikate einträgst.</p>
<p>PS: DEin Code sieht übrigens grauenhaft aus <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/1164417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164417</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 30 Oct 2006 12:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vektor* bzw. Datenstruktur fehlerhaft. on Mon, 30 Oct 2006 12:18:04 GMT]]></title><description><![CDATA[<p>Gut, ich denke der Hinweis reicht mir aus. Habe das Problem erkannt.. Danke.</p>
<p>Was genau meinst Du mit Grauenhaft? Hättest Du verbesserungsvorschläge?<br />
Kritik interessiert mich <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>
<p>Gruß,<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164423</guid><dc:creator><![CDATA[chrismichnich]]></dc:creator><pubDate>Mon, 30 Oct 2006 12:18:04 GMT</pubDate></item></channel></rss>