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

C++ vector使用的一些注意事項(xiàng)

 更新時(shí)間:2019年08月14日 10:15:53   作者:Leehm  
這篇文章主要給大家介紹了關(guān)于C++ vector使用的一些注意事項(xiàng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1. 初始化

       c++ 11以后新增了大括號(hào){}的初始化方式,需要注意與()的區(qū)別,如:

         std::vector<int> vecTest1(5);         //初始化5個(gè)元素,每個(gè)都是0

         std::vector<int> vecTest2{ 5 };       //初始化1個(gè)元素,值是5

 

2.  添加元素:push_back

       通過(guò)push_back添加新的元素進(jìn)入vector后,vector的內(nèi)存有時(shí)候會(huì)發(fā)生變化,這取決于size和capacity大小,當(dāng)然這些都是系統(tǒng)來(lái)處理的,詳細(xì)可以參考stl源碼

        當(dāng)size<capacity的時(shí)候,直接加到末尾,不會(huì)變化

        當(dāng)size==capacity的時(shí)候,會(huì)重新申請(qǐng)另外一塊內(nèi)存,然后copy過(guò)去加到尾部,這個(gè)時(shí)候就會(huì)有變化了。

        對(duì)于stl的容器,都有成員:

                 begin()  //起始位置

                 end() //結(jié)束位置

                 size() //當(dāng)前大小

         capacity() //當(dāng)前容量,即已申請(qǐng)的內(nèi)存大小

     vector是一段連續(xù)的內(nèi)存空間,有三個(gè)標(biāo)識(shí)內(nèi)存的位置,start,end,finish, size=end-start, capacity=finish-start

     很多時(shí)候在使用vector的時(shí)候,會(huì)看到size=capacity,這個(gè)時(shí)候直接添加元素到尾部,內(nèi)存明顯是不夠的,此時(shí)會(huì)重新在別處分配一塊大小足夠

     有時(shí)候也有size<capacity, 這個(gè)時(shí)候就直接加在尾部了。

std::cout << "vecNum push back init" << std::endl;
vector<int> vecNum(5);
std::cout << "vecNum addr: " << &vecNum << std::endl;
for(auto i = 5; i < 10; i++)
{
 vecNum.push_back(i*10);
 std::cout << "vecNum push_back(" << i << ")=" << i*10 << std::endl;
 
 std::cout << "vecNum.size() = " << vecNum.size() << ",vecNum.capacity() = " << vecNum.capacity() << std::endl;
 std::cout << "vecNum.begin() addr: " << &(*vecNum.begin()) << std::endl;
}
std::cout << "vecNum addr: " << &vecNum << std::endl;

3. 關(guān)于earse和remove

     erase返回的是當(dāng)前刪除的元素的一下個(gè)位置的迭代器,所以需要注意的是遍歷時(shí)候的++運(yùn)算,這個(gè)與其它list,map差不多,

    需要注意的earse后內(nèi)存并未真正的清空,僅僅是刪除內(nèi)容,真正的容量大小capacity并沒(méi)有改變,需要通過(guò)swap來(lái)實(shí)現(xiàn)capacity的減小

     全部清空可以考慮:vector<int>().swap(vecNum);

auto itor = vecNum.begin();
for( ; itor != vecNum.end(); )
{
 auto num = *itor;
 if(num == 60)
 {
 itor = vecNum.erase(itor);
 break;
 }
 else
 {
 itor++;
 }
}

 std::cout << "after erase element 60:" << std::endl;
 printVector(vecNum);
 vector<int>(vecNum).swap(vecNum); //將vecNum的內(nèi)存空洞清除
 printVector(vecNum);

      //remove只是通過(guò)迭代器的指針向前移動(dòng)來(lái)刪除,將不需要?jiǎng)h除的元素往前移,因此需要?jiǎng)h除的就都在尾部了

      //返回新的指向尾部需要?jiǎng)h除的元素的迭代器

      因此還是得配合earse來(lái)使用,所以一般真要?jiǎng)h除,建議直接遍歷使用earse

auto itor = remove_if(vecNum.begin(), vecNum.end(),[](int x)->bool{ return x == 20; });
//or
//auto itor = remove(vecNum.begin(), vecNum.end(),20);
 
//通過(guò)erase刪除
vecNum.erase(itor, vecNum.end());

4. 關(guān)于vector< bool>  -- 慎用

       出處: http://m.fzitv.net/article/167636.htm

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

       首先vector< bool> 并不是一個(gè)通常意義上的vector容器,這個(gè)源自于歷史遺留問(wèn)題。

早在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)镃++沒(méi)有直接去給一個(gè)bit來(lái)操作,

    所以用operator[]的時(shí)候, 正常容器返回的應(yīng)該是一個(gè)對(duì)應(yīng)元素的引用,

   但是對(duì)于vector< bool>實(shí)際上訪問(wèn)的是一個(gè)”proxy reference”而不是一個(gè)”true reference”,返回的是”std::vector< bool>:reference”類型的對(duì)象。

   因此,使用auto自動(dòng)類型推導(dǎo)時(shí)會(huì)出現(xiàn)問(wèn)題

//vector<bool>慎用
	vector<bool> vecBool = { false, true, false };
	bool test1 = vecBool[0]; 
	auto test2 = vecBool[1];
	test1 = true; //test1的初始化它其實(shí)暗含了一個(gè)隱式的類型轉(zhuǎn)換(直接對(duì)vecBool[0]賦值會(huì)修改vecBool中的值,但是對(duì)test1不會(huì))
	test2 = false; //test2它的類型并不是bool,而是一個(gè)vector< bool>中的一個(gè)內(nèi)部類,而此時(shí)如果修改test2的值,vecBool中的值也會(huì)跟著修改
	auto index = 0;
	for (auto i : vecBool)
	{
 cout << "vecBool[" << index << "]" << i << std::endl;
 index++;
	}

總結(jié)

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

相關(guān)文章

  • C++11中union的使用方法示例

    C++11中union的使用方法示例

    這篇文章主要給大家介紹了關(guān)于C++11中union的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 詳解C++基礎(chǔ)——類繼承

    詳解C++基礎(chǔ)——類繼承

    這篇文章主要介紹了C++類繼承,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • C++私有繼承(二)

    C++私有繼承(二)

    這篇文章主要介紹了C++私有繼承,在私有繼承時(shí),基類的公有對(duì)象以及保護(hù)對(duì)象會(huì)變成派生類的私有對(duì)象。我們可以在派生類方法當(dāng)中使用它,但無(wú)法通過(guò)派生類對(duì)象直接調(diào)用,但無(wú)法訪問(wèn)基類的私有方法和對(duì)象,下面具體內(nèi)容,需要的朋友可以參考一下
    2022-01-01
  • C語(yǔ)言八皇后問(wèn)題解決方法示例【暴力法與回溯法】

    C語(yǔ)言八皇后問(wèn)題解決方法示例【暴力法與回溯法】

    這篇文章主要介紹了C語(yǔ)言八皇后問(wèn)題解決方法,簡(jiǎn)單描述了八皇后問(wèn)題并結(jié)合實(shí)例形式分析了C語(yǔ)言基于暴力法與回溯法解決八皇后的具體操作技巧,需要的朋友可以參考下
    2018-01-01
  • C++實(shí)現(xiàn)神經(jīng)BP神經(jīng)網(wǎng)絡(luò)

    C++實(shí)現(xiàn)神經(jīng)BP神經(jīng)網(wǎng)絡(luò)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)神經(jīng)BP神經(jīng)網(wǎng)絡(luò),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C++中的RTTI機(jī)制詳解

    C++中的RTTI機(jī)制詳解

    這篇文章主要介紹了C++中的RTTI機(jī)制詳解,本文詳細(xì)的總結(jié)了RTTI的相關(guān)知識(shí),需要的朋友可以參考下
    2014-10-10
  • C++直接cout指針名的含義?

    C++直接cout指針名的含義?

    今天小編就為大家分享一篇關(guān)于C++直接cout指針名的含義?,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • 用c語(yǔ)言編寫(xiě)一個(gè)通訊錄代碼詳解

    用c語(yǔ)言編寫(xiě)一個(gè)通訊錄代碼詳解

    大家好,本篇文章主要講的是用c語(yǔ)言實(shí)現(xiàn)一個(gè)通訊錄代碼詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Qt 實(shí)現(xiàn)畫(huà)線筆鋒效果詳細(xì)原理及示例代碼

    Qt 實(shí)現(xiàn)畫(huà)線筆鋒效果詳細(xì)原理及示例代碼

    這篇文章主要介紹了Qt 實(shí)現(xiàn)畫(huà)線筆鋒效果詳細(xì)原理及示例代碼。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C++類型轉(zhuǎn)換運(yùn)算符的實(shí)例詳解

    C++類型轉(zhuǎn)換運(yùn)算符的實(shí)例詳解

    這篇文章主要介紹了C++類型轉(zhuǎn)換運(yùn)算符的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能夠掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09

最新評(píng)論

普兰县| 云和县| 湘乡市| 大姚县| 达尔| 响水县| 会宁县| 乐至县| 元朗区| 丽水市| 灵山县| 临猗县| 应城市| 鹤峰县| 钟祥市| 井研县| 白水县| 成安县| 双鸭山市| 阳城县| 内丘县| 临安市| 姜堰市| 德惠市| 泌阳县| 丹阳市| 东乡| 昌吉市| 布拖县| 鹿邑县| 永定县| 莱西市| 遂昌县| 海兴县| 甘德县| 视频| 黔西县| 磐安县| 周口市| 天全县| 临安市|