Jak doszło do std :: vector <bool>?


15

Obecnie praktycznie wszyscy programiści C ++ zgadzają się, że std::vector<bool>to pomyłka, ponieważ nie jest to pojemnik, a jego przypadki użycia w dużej mierze pokrywają się z przypadkami tego std::bitset.

Jak zagłosowano na standard? Czy wówczas było to kontrowersyjne? Jakie były główne argumenty potwierdzające?


Nie było std::vectorwcześniej napisane std::bitset?
dan04,


3
Herb Sutter pisze też obszernie o std::vector<bool> tu i tu . Myślę, że jeśli zagłębisz się nieco w jego pisma, znajdziesz wszystkie potrzebne informacje.
Robert Harvey,

Odpowiedzi:


10

Od Herb Sutter przy użyciu cytowanego odniesienia:

Specjalizacja wektorowa została celowo wprowadzona do standardu, aby dać przykład, jak napisać pojemnik proxy. „Kontener proxy” to kontener, do którego obiektów nie dociera się bezpośrednio; zamiast dawać wskazówki lub odwołania do zawartego obiektu, proxy dostarcza obiekty proxy, których można użyć do pośredniego dostępu do obiektu lub manipulowania nim. Kolekcje proxy mogą być przydatne w przypadkach, gdy do obiektów w kolekcji nie zawsze można bezpośrednio uzyskać niezawodny bezpośredni dostęp, tak jakby znajdowały się one w pamięci, jak na przykład w przypadku kolekcji dyskowej, która automatycznie umieszcza strony w pamięci i poza pamięcią pod okładkami jako potrzebne. Pomysł polegał więc na pokazaniu, jak sprawić, by taki serwer proxy spełniał wymagania „kontenera”

I tak, w tym czasie odbyła się dyskusja.

  1. Aby zobaczyć wszystkie krwawe szczegóły, przejdź do DejaNews i przeprowadź wyszukiwanie mocy dla Subject = "vector and bool" i Forum = " c ++ ". Dyskusje odbyły się w styczniu / lutym 1997 r. Można również znaleźć nowsze dyskusje od osób pytających, jak wyłączyć specjalizację wektorową; moja rada znajduje się na końcu tego artykułu.

Reszta jest historią. I nienawidzę patrzeć na pytanie bez odpowiedzi z tak dobrymi linkami.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.