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.
-
Gerade weil dieses Thema sehr alt ist und sofort von den Suchmaschinen gefunden wird:
"böse" oder "bad" kann man wirklich nicht sagen - das wäre ziemlich weit aus dem Fenster gelehnt - "opinionated" sozusagen.
Ggf.(eher höchstwahrscheinlich!!!) ist die STL repariert worden. Jedenfalls nutze ich einen std::vector<bool> nur unter sehr bestimmten Umständen - diese erfordern in der Regel keine Element-Referenzen/-Zeiger, deswegen kann ich zur Aussage "Referenzen und Pointer auf Elemente gehen schief" nichts beitragen ausser. "Und sonst?".
Andererseits ist es schon wichtig, die Frage "warum überhaupt ein vector<bool>, kommt nichts Anderes in Frage?" zu stellen.
Dennoch ist die Schwarz - oder - Weiss - Frage bei std::vector<bool> nicht so offensichtlich "schwarz", wie vor 15 Jahren behauptet.
-
Ich hab gerad aufs Datum geguckt, und 9/11 gelesen.
Aber die Frage war ja 10 Jahre danach. Also nur 15 Jahre (und etliche Kriege...) später.Aber mal für blöde: Warum sollte man
vector<bool>nicht verwenden?