C++中vector與remove()函數(shù)詳解
C++中vector與remove()函數(shù)
話不多說,直接來
remove()干了什么:把被刪除元素 后面的元素 移動到當(dāng)前被刪除元素位置,返回最后一個被改變值的下一個迭代器。。
舉栗:
// 首先,定義一個vector
vector<int> demo = {1,3,3,4,3,5,6};vector的對應(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)前被刪除元素位置,返回最后一個被改變值的下一個迭代器。。源碼如下:
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指針找到第一個匹配元素;
- 索引 i 指向 first 所指元素;
- 索引i向后遍歷,找到與first不同的元素,賦值給first指向元素,first指針后移;
- 循環(huán)第3步。(索引i到vector末尾結(jié)束循環(huán))
畫圖解釋一下

后續(xù)
這樣可以用來做什么?首先,返回的first迭代器,剛好是我們所要vector的末尾。也就是說demo.begin()到remove(3),是我們所需的vector(即刪掉3)但是我們會發(fā)現(xiàn),其實還有元素留在vector里(它的size容量大小沒有改變)所以可以通過erase操作,把后面的刪了(size容量變小,但是capacity容量不變)
最終返回的結(jié)果:
1 4 5 6
到此這篇關(guān)于C++中vector與remove()函數(shù)的文章就介紹到這了,更多相關(guān)C++ vector與remove()函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言?超詳細講解算法的時間復(fù)雜度和空間復(fù)雜度
算法復(fù)雜度分為時間復(fù)雜度和空間復(fù)雜度。其作用:?時間復(fù)雜度是度量算法執(zhí)行的時間長短;而空間復(fù)雜度是度量算法所需存儲空間的大小2022-03-03
C/C++如何實現(xiàn)循環(huán)左移,循環(huán)右移
這篇文章主要介紹了C/C++如何實現(xiàn)循環(huán)左移,循環(huán)右移,具有很好的參考價值,希望對大家有所幫助。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
C++中四種強制轉(zhuǎn)換的實現(xiàn)方法與區(qū)別
這篇文章主要為大家詳細介紹了C++中四種強制轉(zhuǎn)換的實現(xiàn)方法與區(qū)別,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-06-06
C++ explicit構(gòu)造函數(shù)實例解析
這篇文章主要介紹了C++ explicit構(gòu)造函數(shù),需要的朋友可以參考下2014-07-07

