c++ vector 一部分_C++ vector 使用注意事项
作者:Leehm
鏈接:https://www.cnblogs.com/leehm/p/10929756.html
1、初始化
c++ 11以后新增了大括號{}的初始化方式,需要注意與()的區(qū)別,如:
std::vector vecTest1(5);? ? ? ? ?//初始化5個元素,每個都是0
std::vector vecTest2{ 5 };? ? ? ?//初始化1個元素,值是5
2、添加元素:push_back
通過push_back添加新的元素進入vector后,vector的內(nèi)存有時候會發(fā)生變化,這取決于size和capacity大小,當然這些都是系統(tǒng)來處理的,詳細可以參考stl源碼
當size
當size==capacity的時候,會重新申請另外一塊內(nèi)存,然后copy過去加到尾部,這個時候就會有變化了。
對于stl的容器,都有成員:
begin()? //起始位置?
end() //結(jié)束位置?
size() //當前大小?
capacity() //當前容量,即已申請的內(nèi)存大小
vector是一段連續(xù)的內(nèi)存空間,有三個標識內(nèi)存的位置,start,end,finish, size=end-start, capacity=finish-start
很多時候在使用vector的時候,會看到size=capacity,這個時候直接添加元素到尾部,內(nèi)存明顯是不夠的,此時會重新在別處分配一塊大小足夠
有時候也有size
std::3、關(guān)于earse和remove
erase返回的是當前刪除的元素的一下個位置的迭代器,所以需要注意的是遍歷時候的++運算,這個與其它list,map差不多,
需要注意的earse后內(nèi)存并未真正的清空,僅僅是刪除內(nèi)容,真正的容量大小capacity并沒有改變,需要通過swap來實現(xiàn)capacity的減小
全部清空可以考慮:vector().swap(vecNum);
auto?itor?=?vecNum.begin();//remove只是通過迭代器的指針向前移動來刪除,將不需要刪除的元素往前移,因此需要刪除的就都在尾部了
//返回新的指向尾部需要刪除的元素的迭代器
因此還是得配合earse來使用,所以一般真要刪除,建議直接遍歷使用earse
auto?itor?=?remove_if(vecNum.begin(),?vecNum.end(),[](4、關(guān)于vector< bool>? -- 慎用
出處:?https://blog.csdn.net/DoronLee/article/details/78462208
vector< bool> 并不是一個STL容器,不是一個STL容器,不是一個STL容器!
首先vector< bool> 并不是一個通常意義上的vector容器,這個源自于歷史遺留問題。?
早在C++98的時候,就有vector< bool>這個類型了,但是因為當時為了考慮到節(jié)省空間的想法,所以vector< bool>里面不是一個Byte一個Byte儲存的,它是一個bit一個bit儲存的!
因為C++沒有直接去給一個bit來操作,
所以用operator[]的時候,?正常容器返回的應(yīng)該是一個對應(yīng)元素的引用,
但是對于vector< bool>實際上訪問的是一個”proxy reference”而不是一個”true reference”,返回的是”std::vector< bool>:reference”類型的對象。
因此,使用auto自動類型推導(dǎo)時會出現(xiàn)問題
//vector慎用●編號520,輸入編號直達本文
●輸入m獲取文章目錄
C語言與C++編程分享C/C++技術(shù)文章
總結(jié)
以上是生活随笔為你收集整理的c++ vector 一部分_C++ vector 使用注意事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: geojson在线生成工具_logofr
- 下一篇: mac删除ssh key_SecureC