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





  • 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.


  • Mod

    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) 😃


  • Mod

    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.


Anmelden zum Antworten