<?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[Empfehlung für Datenstruktur]]></title><description><![CDATA[<p>Hallo Leute!</p>
<p>Ich verfolge die Absicht, meine gut 10 Jahre brach liegenden C++ Kenntnisse aufzuarbeiten, mit der Absicht, diesmal am Ball zu bleiben. Dafür wählte ich mir ein Projekt mit potentiell praktischem Wert: Mein <em>ScaleGenerator</em> soll vorerst nach Benennung eines Grundtones und eines Skalentyps die dazugehörigen Noten ausspucken. Macht er auch <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>Jetzt wäre der nächste Schritt, die Nutzdaten in einer Textdatei abzulegen bzw. aus einer solchen zu holen. <em>Daten</em> heisst:</p>
<p><strong>unsigned int</strong> - für <em>Noten gesamt pro Skala</em> (ich nehme die Oktave mit rein - also meist der Wert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /><br />
<strong>string</strong> - bezeichnet den <em>Skalentyp</em><br />
<strong>unsigned int[8]</strong> - bildet die <em>Intervallstruktur</em> der Skala ab (in sog. Halbtonschritten)</p>
<p>Testweise habe ich sie in einer Datei wie folgt abgelegt:</p>
<pre><code>8,Ionisch,0,2,4,5,7,9,11,12
8,Dorisch,0,2,3,5,7,9,10,12
8,Phrygisch,0,1,3,5,7,8,10,12
8,Lydisch,0,2,4,6,7,9,11,12
8,Mixolydisch,0,2,4,5,7,9,10,12
8,Aeolisch,0,2,3,5,7,8,10,12
8,Lokrisch,0,1,3,5,6,8,10,12
</code></pre>
<p>Eine <em>Skala</em> ist hierbei ein Objekt. Die Klasse Scale:</p>
<pre><code>class Scale
{
      public:
			 Scale();
			 Scale (unsigned int notesTotal); //bei zB. Pentatonik wird '5' übergeben

		     void setRoot(std::string root);
			 void setType(std::string type);
             void setiValStruc(unsigned int arr[]);
             void setScaleNotes(std::string note);
             bool checkNotesTotal (unsigned int comp);
             std::string getType();
             std::string getRoot();
             void getiValStruc(unsigned int arr[]);
             void getScaleNotes(std::vector&lt;std::string&gt;&amp; tempVector);
             unsigned int getNotesTotal();

      private:
              std::string type;            // Bezeicher - hier: 'Aeolisch'
              std::string root;            // Grundton - hier: E
              unsigned int iValStruc[8];   // im Fall von E Aeolisch (Moll) '0,2,3,5,7,8,10,12'
              unsigned int notesTotal;     // hat keinen 'Setter' - nur zur Überprüfung
              vector&lt;std::string&gt; notes;   // hier 'E,F#,G,A,B,C,D,E'
};
</code></pre>
<p>Getter, Setter und Konstruktoren funtzen. Bevor ich mich jetzt allerdings in irgendeinen Lösungsweg betr. des Handlings der Nutzdaten verbeisse, möchte ich Euch Leute aus der Praxis fragen, wie ich sie am besten ablege und welche Trennzeichen und Methoden des - sagt man dazu schon Parsen? - Auswertens damit verbunden sind. Eher Zeilen- oder Zeichenweise, getline oder doch fgets? Ich kann es halt nicht einschätzen.</p>
<p>Ist ein Privat/Freizeitprojekt - soll heissen: nicht ultra dringend. Ich werde solange dass Feld der 'Offsetproblematik' beackern - es läuft momentan nur mit C Dur fehlerfrei <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>Grüße von<br />
Forest</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318179/empfehlung-für-datenstruktur</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 11:52:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318179.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Jul 2013 16:23:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Empfehlung für Datenstruktur on Wed, 03 Jul 2013 16:23:57 GMT]]></title><description><![CDATA[<p>Hallo Leute!</p>
<p>Ich verfolge die Absicht, meine gut 10 Jahre brach liegenden C++ Kenntnisse aufzuarbeiten, mit der Absicht, diesmal am Ball zu bleiben. Dafür wählte ich mir ein Projekt mit potentiell praktischem Wert: Mein <em>ScaleGenerator</em> soll vorerst nach Benennung eines Grundtones und eines Skalentyps die dazugehörigen Noten ausspucken. Macht er auch <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>Jetzt wäre der nächste Schritt, die Nutzdaten in einer Textdatei abzulegen bzw. aus einer solchen zu holen. <em>Daten</em> heisst:</p>
<p><strong>unsigned int</strong> - für <em>Noten gesamt pro Skala</em> (ich nehme die Oktave mit rein - also meist der Wert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /><br />
<strong>string</strong> - bezeichnet den <em>Skalentyp</em><br />
<strong>unsigned int[8]</strong> - bildet die <em>Intervallstruktur</em> der Skala ab (in sog. Halbtonschritten)</p>
<p>Testweise habe ich sie in einer Datei wie folgt abgelegt:</p>
<pre><code>8,Ionisch,0,2,4,5,7,9,11,12
8,Dorisch,0,2,3,5,7,9,10,12
8,Phrygisch,0,1,3,5,7,8,10,12
8,Lydisch,0,2,4,6,7,9,11,12
8,Mixolydisch,0,2,4,5,7,9,10,12
8,Aeolisch,0,2,3,5,7,8,10,12
8,Lokrisch,0,1,3,5,6,8,10,12
</code></pre>
<p>Eine <em>Skala</em> ist hierbei ein Objekt. Die Klasse Scale:</p>
<pre><code>class Scale
{
      public:
			 Scale();
			 Scale (unsigned int notesTotal); //bei zB. Pentatonik wird '5' übergeben

		     void setRoot(std::string root);
			 void setType(std::string type);
             void setiValStruc(unsigned int arr[]);
             void setScaleNotes(std::string note);
             bool checkNotesTotal (unsigned int comp);
             std::string getType();
             std::string getRoot();
             void getiValStruc(unsigned int arr[]);
             void getScaleNotes(std::vector&lt;std::string&gt;&amp; tempVector);
             unsigned int getNotesTotal();

      private:
              std::string type;            // Bezeicher - hier: 'Aeolisch'
              std::string root;            // Grundton - hier: E
              unsigned int iValStruc[8];   // im Fall von E Aeolisch (Moll) '0,2,3,5,7,8,10,12'
              unsigned int notesTotal;     // hat keinen 'Setter' - nur zur Überprüfung
              vector&lt;std::string&gt; notes;   // hier 'E,F#,G,A,B,C,D,E'
};
</code></pre>
<p>Getter, Setter und Konstruktoren funtzen. Bevor ich mich jetzt allerdings in irgendeinen Lösungsweg betr. des Handlings der Nutzdaten verbeisse, möchte ich Euch Leute aus der Praxis fragen, wie ich sie am besten ablege und welche Trennzeichen und Methoden des - sagt man dazu schon Parsen? - Auswertens damit verbunden sind. Eher Zeilen- oder Zeichenweise, getline oder doch fgets? Ich kann es halt nicht einschätzen.</p>
<p>Ist ein Privat/Freizeitprojekt - soll heissen: nicht ultra dringend. Ich werde solange dass Feld der 'Offsetproblematik' beackern - es läuft momentan nur mit C Dur fehlerfrei <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>Grüße von<br />
Forest</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2336346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2336346</guid><dc:creator><![CDATA[ForestThumb]]></dc:creator><pubDate>Wed, 03 Jul 2013 16:23:57 GMT</pubDate></item><item><title><![CDATA[Reply to Empfehlung für Datenstruktur on Wed, 03 Jul 2013 17:01:34 GMT]]></title><description><![CDATA[<p>ForestThumb schrieb:</p>
<blockquote>
<p>Getter, Setter und Konstruktoren funtzen.</p>
</blockquote>
<p>Implementiere nur das, was du wirklich brauchst. Mit Getter/Setter um sich zu werfen ist nicht gut. Nicht jedes Attribut braucht Getter+Setter. Manche brauchen gar nichts. Manche brauchen nur Getter oder nur Setter.</p>
<p>ForestThumb schrieb:</p>
<blockquote>
<p>wie ich sie am besten ablege und welche Trennzeichen und Methoden des - sagt man dazu schon Parsen? - Auswertens damit verbunden sind.</p>
</blockquote>
<p>Das beste was du machen kannst, ist ein Whitespace (Leerzeichen, Tab, Zeilenumbruch, Kombinationen davon) als Trennzeichen zu nutzen. Wieso? Ganz einfach. Der <code>extraction operator &gt;&gt;</code> ignoriert (lesen+verwerfen) führende Whitespace. Somit musst du die Trennzeichen nichst selbst aussortieren.</p>
<p>ForestThumb schrieb:</p>
<blockquote>
<p>Eher Zeilen- oder Zeichenweise, getline oder doch fgets? Ich kann es halt nicht einschätzen.</p>
</blockquote>
<p><code>fgets</code> ? Hab ich nocht nie gebraucht. Zeilenweise lesen tu ich fast nie. Meist hast du ja verschiedene Datentypen, wie hier (Ganzzahlen, string, eventuell mal eine Fließkommazahl). Würdest du nun Zeilenweise lesen, müsstest du die Zeile nach dem Lesen zerhacken, um an die einzelnen Werte für die entsprechenden Datentypen zu kommen. Meist führt das zu <code>ifstream ==&gt; getline ==&gt; sstream &gt;&gt; Ergebnis</code> . Das ist natürlich Schwachsinn. Es gilt: <code>sstream</code> nicht missbrauchen, sondern gleich richtig (entsprechend der Datentypen) lesen: <code>ifstream ==&gt; Ergebnis</code><br />
Die allgemeine Vorgehensweise ist dafür:</p>
<pre><code>// 1. Definiere deine Klasse
// 2. Überlade den operator&gt;&gt; so, dass du einfach eine Instanz deiner Klasse einlesen kannst.
// 3. In der main-Funktion brauchst du dann nur noch eine einfache for-Schleife.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2336364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2336364</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Wed, 03 Jul 2013 17:01:34 GMT</pubDate></item><item><title><![CDATA[Reply to Empfehlung für Datenstruktur on Wed, 03 Jul 2013 18:25:22 GMT]]></title><description><![CDATA[<p>Noch ein Tipp: die Getter sollten mit 'const' deklariert werden, z.B.</p>
<pre><code class="language-cpp">std::string getType() const;
</code></pre>
<p>Stichwort: const-correctness</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2336376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2336376</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 03 Jul 2013 18:25:22 GMT</pubDate></item><item><title><![CDATA[Reply to Empfehlung für Datenstruktur on Wed, 03 Jul 2013 18:41:57 GMT]]></title><description><![CDATA[<p>out schrieb:</p>
<blockquote>
<p><code>ifstream ==&gt; getline ==&gt; sstream &gt;&gt; Ergebnis</code></p>
</blockquote>
<p>Das Teil heißt mittlerweile stringstream.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2336385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2336385</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 03 Jul 2013 18:41:57 GMT</pubDate></item><item><title><![CDATA[Reply to Empfehlung für Datenstruktur on Wed, 03 Jul 2013 19:00:04 GMT]]></title><description><![CDATA[<p>Erstmal danke ich für die Hinweise, deren Wert ich jetzt noch gar nicht einschätzen kann, weil ich in <em>OOP Denke</em> noch einiges nachzuholen habe. Aber ich werde Stichworte recherchieren, lesen und dann inhaltlich antworten und <strong>sicherlich</strong> fragen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2336392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2336392</guid><dc:creator><![CDATA[ForestThumb]]></dc:creator><pubDate>Wed, 03 Jul 2013 19:00:04 GMT</pubDate></item><item><title><![CDATA[Reply to Empfehlung für Datenstruktur on Wed, 03 Jul 2013 19:03:31 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>out schrieb:</p>
<blockquote>
<p><code>ifstream ==&gt; getline ==&gt; sstream &gt;&gt; Ergebnis</code></p>
</blockquote>
<p>Das Teil heißt mittlerweile stringstream.</p>
</blockquote>
<p>Ich meinte damit auch den Header. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2336393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2336393</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Wed, 03 Jul 2013 19:03:31 GMT</pubDate></item></channel></rss>