第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么vector <bool>不是STL容器?

為什么vector <bool>不是STL容器?

C++
慕田峪4524236 2019-08-31 15:43:41
Scott Meyers的書第18項有效STL:50改進您對標準模板庫的使用的具體方法說要避免,vector <bool>因為它不是STL容器而且它實際上并不存在bool。以下代碼:vector <bool> v; bool *pb =&v[0];不會編譯,違反STL容器的要求。錯誤:cannot convert 'std::vector<bool>::reference* {aka std::_Bit_reference*}' to 'bool*' in initializationvector<T>::operator []返回類型應該是T&,但為什么它是一個特殊情況vector<bool>?什么是vector<bool>真正組成的呢?該項目進一步說:deque<bool> v; // is a STL container and it really contains bools這可以用作替代品vector<bool>嗎?有人可以解釋一下嗎?
查看完整描述

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作為替代并不總是正確的答案。


查看完整回答
反對 回復 2019-08-31
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

vector<bool>包含壓縮形式的布爾值,僅使用一位作為值(而不是8如何bool []數組)。不可能在c ++中返回對某個位的引用,因此有一個特殊的幫助器類型“位引用”,它為您提供了內存中某些位的接口,并允許您使用標準運算符和強制轉換。


查看完整回答
反對 回復 2019-08-31
  • 3 回答
  • 0 關注
  • 1012 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號