12 Bool-Werte. Wie am Besten speichern.

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
alf4712
Beiträge: 3
Registriert: Mo Apr 12, 2021 4:05 pm

12 Bool-Werte. Wie am Besten speichern.

Beitrag von alf4712 » Mi Apr 14, 2021 12:00 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: 12 Bool-Werte. Wie am Besten speichern.

Beitrag von Xin » Mi Apr 14, 2021 12:15 pm

alf4712 hat geschrieben:
Mi Apr 14, 2021 12:00 pm
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?
Ich würde wohl

Code: Alles auswählen

bool varname[12];
nehmen.

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.
alf4712 hat geschrieben:
Mi Apr 14, 2021 12:00 pm
Mir geht es in erster Linie immer um Geschwindigkeit. Also die Klasse muss schnell sein.
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.

Antworten