C++中vector與remove()函數(shù)詳解
C++中vector與remove()函數(shù)
話不多說,直接來
remove()干了什么:把被刪除元素 后面的元素 移動(dòng)到當(dāng)前被刪除元素位置,返回最后一個(gè)被改變值的下一個(gè)迭代器。。
舉栗:
// 首先,定義一個(gè)vector vector<int> demo = {1,3,3,4,3,5,6};
vector的對(duì)應(yīng)值分別為:1,3,3,4,3,5,6
// 調(diào)用remove函數(shù) vector<int>:: iterator demo_return = remove(demo.begin(), demo.end(), 3);
打印查看最終結(jié)果
cout << "remove() return:" <<endl; for(auto iter = demo_return; iter != demo_return.end(); ++iter){ ? ? ? ? cout << *iter << ' '; ? ? } cout << endl; cout << "after remove():" << endl; for(auto iter = demo.begin(); iter != demo.end(); ++iter){ ? ? ? ? cout << *iter << ' '; }
remove() return:
3 5 6
after remove():
1 4 5 6 3 5 6
可以看到,最終結(jié)果:
remove函數(shù)返回值是:3,5,6
在remove函數(shù)操作后vector為:1,4,5,6,3,5,6
它到底做了什么?
還是那句話:把被刪除元素 后面的元素 移動(dòng)到當(dāng)前被刪除元素位置,返回最后一個(gè)被改變值的下一個(gè)迭代器。。源碼如下:
remove(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value_) { __first = _VSTD::find(__first, __last, __value_); if (__first != __last) { _ForwardIterator __i = __first; while (++__i != __last) { if (!(*__i == __value_)) { *__first = _VSTD::move(*__i); ++__first; } } } return __first; }
大致流程如下:
- first指針找到第一個(gè)匹配元素;
- 索引 i 指向 first 所指元素;
- 索引i向后遍歷,找到與first不同的元素,賦值給first指向元素,first指針后移;
- 循環(huán)第3步。(索引i到vector末尾結(jié)束循環(huán))
畫圖解釋一下
后續(xù)
這樣可以用來做什么?首先,返回的first迭代器,剛好是我們所要vector的末尾。也就是說demo.begin()到remove(3),是我們所需的vector(即刪掉3)但是我們會(huì)發(fā)現(xiàn),其實(shí)還有元素留在vector里(它的size容量大小沒有改變)所以可以通過erase操作,把后面的刪了(size容量變小,但是capacity容量不變)
最終返回的結(jié)果:
1 4 5 6
到此這篇關(guān)于C++中vector與remove()函數(shù)的文章就介紹到這了,更多相關(guān)C++ vector與remove()函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C/C++?判斷計(jì)算機(jī)存儲(chǔ)器字節(jié)序(端序)的幾種方式
字節(jié)序是計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)的格式,主存儲(chǔ)器(主存)的字節(jié)序?qū)Τ绦虻囊浦残院图嫒菪灾陵P(guān)重要,利用聯(lián)合體、指針、位移和掩碼等方法可以檢測(cè)和處理字節(jié)序問題,對(duì)于內(nèi)存數(shù)據(jù)操作重要,也關(guān)系到跨平臺(tái)和網(wǎng)絡(luò)通信的數(shù)據(jù)處理2024-10-10c語言數(shù)據(jù)結(jié)構(gòu)之并查集 總結(jié)
一種用于管理分組的數(shù)據(jù)結(jié)構(gòu)。它具備兩個(gè)操作:(1)查詢?cè)豠和元素b是否為同一組 (2) 將元素a和b合并為同一組,需要的朋友可以參考下2018-08-08探討:用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列(我作為面試官的小結(jié))
作為面試官的我,經(jīng)常拿這道用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的面試題來考面試者,通過對(duì)面試者的表現(xiàn)和反應(yīng),有一些統(tǒng)計(jì)和感受,在此做個(gè)小結(jié)2013-05-05C++利用libcurl庫實(shí)現(xiàn)多線程文件下載
這篇文章主要為大家詳細(xì)介紹了C++如何利用libcurl庫實(shí)現(xiàn)多線程文件下載,文章的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2024-01-01