最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++中為什么不提倡使用vector示例詳解

 更新時(shí)間:2019年08月14日 10:31:09   作者:張昭  
這篇文章主要給大家介紹了關(guān)于c++中為什么不提倡使用vector的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

vector< bool> 并不是一個(gè)STL容器,不是一個(gè)STL容器,不是一個(gè)STL容器!

首先vector< bool> 并不是一個(gè)通常意義上的vector容器,這個(gè)源自于歷史遺留問題。
早在C++98的時(shí)候,就有vector< bool>這個(gè)類型了,但是因?yàn)楫?dāng)時(shí)為了考慮到節(jié)省空間的想法,所以vector< bool>里面不是一個(gè)Byte一個(gè)Byte儲(chǔ)存的,它是一個(gè)bit一個(gè)bit儲(chǔ)存的!

因?yàn)镃++沒有直接去給一個(gè)bit來操作,所以用operator[]的時(shí)候,正常容器返回的應(yīng)該是一個(gè)對(duì)應(yīng)元素的引用,但是對(duì)于vector< bool>實(shí)際上訪問的是一個(gè)”proxy reference”而不是一個(gè)”true reference”,返回的是”std::vector< bool>:reference”類型的對(duì)象。

而一般情況情況下

vector< bool> c{ false, true, false, true, false }; 
bool b = c[0]; 
auto d = c[0]; 

對(duì)于b的初始化它其實(shí)暗含了一個(gè)隱式的類型轉(zhuǎn)換。而對(duì)于d,它的類型并不是bool,而是一個(gè)vector< bool>中的一個(gè)內(nèi)部類。

而此時(shí)如果修改d的值,c中的值也會(huì)跟著修改:

d = true;
for(auto i:c)
 cout << i << " ";
cout << endl;
//上式會(huì)輸出1 1 0 1 0

而如果c被銷毀,d就會(huì)變成一個(gè)懸垂指針,再對(duì)d操作就屬于未定義行為。

而為什么說vector< bool>不是一個(gè)標(biāo)準(zhǔn)容器,就是因?yàn)樗荒苤С忠恍┤萜髟撚械幕静僮?,諸如取地址給指針初始化操作:

vector< bool> c{ false, true, false, true, false }; 
&tmp = c[0]; //錯(cuò)誤,不能編譯,對(duì)于引用來說,因?yàn)閏[0]不是一個(gè)左值 
bool *p = &c[0]; //錯(cuò)誤,不能編譯,因?yàn)闊o法將一個(gè)臨時(shí)量地址給綁定到指針

我之前寫過一篇Blog也是講這個(gè)的:

談vector的特殊性——為什么它不是STL容器

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

张家界市| 曲水县| 葫芦岛市| 芜湖市| 峨山| 南郑县| 安达市| 防城港市| 白城市| 许昌市| 理塘县| 交口县| 平顺县| 万载县| 枣庄市| 登封市| 武定县| 福贡县| 化州市| 遵义市| 施秉县| 大埔县| 龙海市| 万荣县| 山丹县| 永胜县| 东方市| 筠连县| 寻乌县| 旌德县| 哈巴河县| 大渡口区| 卢氏县| 樟树市| 军事| 应城市| 阿尔山市| 靖州| 铜鼓县| 舟曲县| 广元市|