Warum vector<bool> böse?
-
Hallo!
Man liest immer wieder irgendwo, dass
vector<bool>böse sei? Warum eigentlich? Bugs in Implementierungen? (Falls ja, welche Compiler?) Was sind die Alternativen?boost::dynamic_bitset?Grüße
-
Google auf die Schnelle: http://stackoverflow.com/questions/670308/alternative-to-vectorbool
-
Hm - ich sollte noch ergänzen, dass es für mich durchaus relevant ist, dass ein element auch nur ein bit braucht, also eine deque<bool> oder vector<char> kommt für mich nicht infrage.
-
Wusste ich gar nicht. Was geht mit vector<bool> denn schief?
-
TravisG schrieb:
Wusste ich gar nicht. Was geht mit vector<bool> denn schief?
Es gibt eine Spezialisierung, bei der die einzelnen Bools gepackt sind. Dadurch verhält er sich anders.
-
Die Probleme mit dem vector<bool> sind, um mal konkret zu werden, folgendes:
- Referenzen und Pointer auf die Elemente gehen schief.
- Die Iteratoren sind nicht random_acces, wie man es von einem vector erwarten würde. Nicht einmal bidirektional. Ich glaube sogar nicht einmal forward.
- Ide Algorithmen in der Standardbibliothek sind in der Regel so optimiert, als wäre ein Zugriff eine billige Aktion. Bei vector<bool> trifft diese Annahme nicht zu.
Das sollte es sein. Wenn du damit leben kannst: Schön für dich.
-
Wie, Iteratoren sind nicht Random-Access

Lese ich hier zum 1. mal. Wüsste auch nicht warum die nicht Random-Access sein sollten. Mir fallen auf die Schnelle nur Möglichkeiten ein die Iteratoren zu implementieren, wo man ganz einfach alle für Random-Access nötigen Operationen implementieren kann.
Also, die Iteratoren sind AFAIK schon Random-Access, nur sind es streng genommen keine Iteratoren (wegen Proxy und so)

-
hustbaer schrieb:
Wie, Iteratoren sind nicht Random-Access

Lese ich hier zum 1. mal. Wüsste auch nicht warum die nicht Random-Access sein sollten. Mir fallen auf die Schnelle nur Möglichkeiten die Iteratoren zu implementieren, wo man ganz einfach alle für Random-Access nötigen Operationen implementieren kann.
Also, die Iteratoren sind AFAIK schon Random-Access, nur sind es streng genommen keine Iteratoren (wegen Proxy und so)

Ja, war vielleicht dumm ausgedrückt und daher missverständlich.