3 回答

TA貢獻1818條經驗 獲得超3個贊
出于空間優(yōu)化的原因,C ++標準(早在C ++ 98中)顯式地調用了vector<bool>
一個特殊的標準容器,其中每個bool僅使用一位空間而不是一個字節(jié)作為普通bool(實現一種“動態(tài)bitset”)。作為這種優(yōu)化的交換,它不提供普通標準容器的所有功能和接口。
在這種情況下,由于你不能在一個字節(jié)內取一個位的地址,所以諸如operator[]
不能返回一個bool&
但卻返回一個允許操縱有問題的特定位的代理對象。由于此代理對象不是a bool&
,因此您無法將其地址分配給bool*
“正?!比萜魃系拇祟惒僮鲉T調用的結果。反過來,這意味著這bool *pb =&v[0];
不是有效的代碼。
另一方面deque
,沒有任何這樣的專業(yè)化調用,所以每個bool取一個字節(jié),你可以從值返回的地址operator[]
。
最后請注意,MS標準庫的實現(可以說)是次優(yōu)的,因為它使用一個小的塊大小來表示deques,這意味著使用deque作為替代并不總是正確的答案。

TA貢獻1951條經驗 獲得超3個贊
vector<bool>
包含壓縮形式的布爾值,僅使用一位作為值(而不是8如何bool []數組)。不可能在c ++中返回對某個位的引用,因此有一個特殊的幫助器類型“位引用”,它為您提供了內存中某些位的接口,并允許您使用標準運算符和強制轉換。
- 3 回答
- 0 關注
- 1012 瀏覽
添加回答
舉報