Hallo,
wie schon gesagt, ich hab vor 15 Jahren das letzte Mal C++ programmiert und bin etwas eingerostet.
Ich brauche eure Meinung zu einer Philosophie-Frage.
Ich habe eine Klasse in der ich mir exakt 12 Bool-Werte speichern muss. Dabei habe ich nun ein paar Möglichkeiten gefunden:
std::array<12,bool>
std::vector<bool>
12 Variablen in den Klassen-Head
Sicherlich gibt es noch ein paar Möglichkeiten mehr...
Welche Version würdet ihr verwenden und warum?
Mir geht es in erster Linie immer um Geschwindigkeit. Also die Klasse muss schnell sein.
Der Hintergrund:
Ich schreibe mir gerade virtuelle Musiker, die mir per MIDI meine Instrumente bedienen. Diese "Musiker" müssen wissen, welcher Akkord momentan aktiv ist und welcher als nächstes kommt.
Da es in der Musik 12 Töne gibt (innerhalb einer Oktave) muss ich sozusagen den Akkord irgendwie speichern. Also merke ich mir, welche Noten derzeit "aktiv" sind. So entsteht mein Akkord.
Danke schon mal für euer Feedback.
12 Bool-Werte. Wie am Besten speichern.
- Xin
- nur zu Besuch hier
- Beiträge: 8861
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: 12 Bool-Werte. Wie am Besten speichern.
Ich würde wohlalf4712 hat geschrieben: ↑Mi Apr 14, 2021 12:00 pmIch habe eine Klasse in der ich mir exakt 12 Bool-Werte speichern muss. Dabei habe ich nun ein paar Möglichkeiten gefunden:
std::array<12,bool>
std::vector<bool>
12 Variablen in den Klassen-Head
Sicherlich gibt es noch ein paar Möglichkeiten mehr...
Welche Version würdet ihr verwenden und warum?
Code: Alles auswählen
bool varname[12];
In modernem C++ würde ich std::array<bool, 12> nehmen, was inhaltlich auf's gleiche rauskommt, aber durchiteriert werden kann.
Außer es wird spezialisiert... bei Vector könnte das passieren, dann wird das auf ein int abgebildet, was Platz spart, aber langsamer ist.
Vector wird auf dem Heap abgebildet, es muss also Speicher allozieren, das kostet Zeit.
12 Variablen sind die unter Umständen schnellste Methode, wenn das Array nicht an erster Stelle liegt. Genauso schnell wie bool[12], aber dafür programmierst Du Dir 'nen Wolf und wirst damit vermutlich die gesparte Zeit wieder verlieren, denn irgendwo musst Du ja entscheiden, ob es die 1. oder 10. Note ist, die Dich gerade interessiert.
Wird häufig auf das Array zugegriffen, würde ich es als erstes in der Klasse stehen lassen, damit der Abstand von this bis zur Array-Variable 0 ist, also diese Addition (+0) wegfallen kann.
Das bezweifle ich. Ich weiß ja nicht, welche Musik Du machen willst, aber irgendwann verkümmern auch die Beats bei Techno zu einem einfachen Brummen. Wenn man die Noten also noch hören möchte... musst Du hier vermutlich nicht übertrieben optimieren.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.