Wie (hoffentlich) wir alle wissen, vector<bool>
ist es total kaputt und kann nicht als C-Array behandelt werden. Was ist der beste Weg, um diese Funktionalität zu erhalten? Bisher habe ich an folgende Ideen gedacht:
- Verwenden Sie
vector<char>
stattdessen ein oder - Verwenden Sie eine Wrapper-Klasse und haben
vector<bool_wrapper>
Wie geht ihr mit diesem Problem um? Ich brauche die c_array()
Funktionalität.
Als Nebenfrage: Wenn ich die c_array()
Methode nicht benötige , wie kann ich dieses Problem am besten angehen, wenn ich wahlfreien Zugriff benötige? Soll ich eine Deque oder etwas anderes verwenden?
Bearbeiten:
- Ich brauche eine dynamische Dimensionierung.
- Für diejenigen, die es nicht wissen,
vector<bool>
ist spezialisiert, so dass jedesbool
1 Bit dauert. Daher können Sie es nicht in ein Array im C-Stil konvertieren. - Ich denke, "Wrapper" ist ein bisschen eine Fehlbezeichnung. Ich dachte so etwas:
Natürlich muss ich dann my_bool
aufgrund möglicher Ausrichtungsprobleme in ein lesen :(
struct my_bool
{
bool the_bool;
};
vector<my_bool> haha_i_tricked_you;
vector<bool>
gerade ein Datenrennen-Fehler in meinem Code verursacht, da ich erwartet hatte, dass verschiedene Threads verschiedene Elemente im Vektor gleichzeitig sicher ändern können. Gelöst mit deque<bool>
.