欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2019年08月14日 10:31:09   作者:張昭  
這篇文章主要給大家介紹了關(guān)于c++中為什么不提倡使用vector的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(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來(lái)操作,所以用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)樗荒苤С忠恍┤萜髟撚械幕静僮鳎T如取地址給指針初始化操作:

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

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

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

總結(jié)

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

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(202.快樂數(shù))

    C++實(shí)現(xiàn)LeetCode(202.快樂數(shù))

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(202.快樂數(shù)),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++內(nèi)存泄漏及檢測(cè)工具詳解

    C++內(nèi)存泄漏及檢測(cè)工具詳解

    最簡(jiǎn)單的方法當(dāng)然是借助于專業(yè)的檢測(cè)工具,比較有名如BoundsCheck,功能非常強(qiáng)大,相信做C++開發(fā)的人都離不開它。此外就是不使用任何工具,而是自己來(lái)實(shí)現(xiàn)對(duì)內(nèi)存泄露的監(jiān)控
    2013-10-10
  • C++實(shí)現(xiàn)幸運(yùn)大抽獎(jiǎng)(QT版)

    C++實(shí)現(xiàn)幸運(yùn)大抽獎(jiǎng)(QT版)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)幸運(yùn)大抽獎(jiǎng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++構(gòu)造析構(gòu)賦值運(yùn)算函數(shù)應(yīng)用詳解

    C++構(gòu)造析構(gòu)賦值運(yùn)算函數(shù)應(yīng)用詳解

    構(gòu)造函數(shù)主要作用在于創(chuàng)建對(duì)象時(shí)為對(duì)象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動(dòng)調(diào)用,無(wú)須手動(dòng)調(diào)用;析構(gòu)函數(shù)主要作用在于對(duì)象銷毀前系統(tǒng)自動(dòng)調(diào)用,執(zhí)行一 些清理工作
    2022-09-09
  • C++中類模板的應(yīng)用你了解多少

    C++中類模板的應(yīng)用你了解多少

    這篇文章主要為大家詳細(xì)介紹了C++中類模板的應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C/C++中的static關(guān)鍵字詳解

    C/C++中的static關(guān)鍵字詳解

    這篇文章主要為大家詳細(xì)介紹了 C/C++中的static關(guān)鍵字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C/C++?Qt?數(shù)據(jù)庫(kù)與TableView實(shí)現(xiàn)多組件聯(lián)動(dòng)

    C/C++?Qt?數(shù)據(jù)庫(kù)與TableView實(shí)現(xiàn)多組件聯(lián)動(dòng)

    Qt?數(shù)據(jù)庫(kù)組件與TableView組件實(shí)現(xiàn)聯(lián)動(dòng)效果,本文通過案例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-12-12
  • Qt項(xiàng)目實(shí)戰(zhàn)之方塊游戲的實(shí)現(xiàn)

    Qt項(xiàng)目實(shí)戰(zhàn)之方塊游戲的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)簡(jiǎn)易的方塊游戲,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下
    2023-03-03
  • C++實(shí)現(xiàn)LeetCode(2.兩個(gè)數(shù)字相加)

    C++實(shí)現(xiàn)LeetCode(2.兩個(gè)數(shù)字相加)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(兩個(gè)數(shù)字相加),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 如何在C語(yǔ)言中判斷socket是否已經(jīng)斷開

    如何在C語(yǔ)言中判斷socket是否已經(jīng)斷開

    如果不主動(dòng)關(guān)閉socket的話,系統(tǒng)不會(huì)自動(dòng)關(guān)閉的,除非當(dāng)前進(jìn)程掛掉了,操作系統(tǒng)把占用的socket回收了才會(huì)關(guān)閉。小編今天跟大家簡(jiǎn)單介紹下如何在C語(yǔ)言中判斷socket是否已經(jīng)斷開
    2019-05-05

最新評(píng)論