STL之容器 選擇時機,刪除元素,迭代器失效

2021-06-06 13:51:47 字數 1583 閱讀 9070

一. 種類:

值得注意的是,陣列可以和stl

演算法配合,因為指標可以當作陣列的迭代器使用。

二.刪除元素

如果想刪除東西,記住

remove

演算法後,要加上

erase

所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為

remove

並不知道它現在作用於哪個容器,所以

remove

演算法不可能真的刪除乙個元素

1.vector

vector

<

int>

v;   

v.reserve(

10);   

for(

inti =1

; i 

<=

10; 

++i) 

cout 

<<

v.size();   

//10v[3

] =v[5

] =v[9

] =99; 

remove(v.begin(), v.end(), 

99); 

cout 

<<

v.size();   

//10!

2. list

listlisttest;

listtest.remove(99);//

這個成員函式將真的刪除元素,並且要比

erase+remove

高效remove

和remove_if

之間的十分相似。但

unique

行為也像

remove

。它用來從乙個區間刪除東西(鄰近的重複值)而不用訪問持有區間元素的容器。如果你真的要從容器中刪除元素,你也必須成對呼叫

unique

和erase

,unique

在list

中也類似於

remove

。正像list::remove

真的刪除東西(而且比

erase-remove

慣用法高效得多)。

list::unique

也真的刪除鄰近的重複值(也比

erase-unique

高效)。 

三 迭代器失效:

乙個網友提的問題:

deque迭代器的失效情況:

1.在deque容器首部或者尾部插入元素不會使得任何迭代器失效。

2.在其首部或尾部刪除元素則只會使指向被刪除元素的迭代器失效。

3.在deque容器的任何其他位置的插入和刪除操作將使指向該容器元素的所有迭代器失效。

list/set/map

1.刪除時,指向該刪除節點的迭代器失效

list

<

int>

intlist; 

list

<

int>

::iterator it 

=intlist.begin(); 

while

(it 

!=intlist.end()) 

四.選擇時機《轉》--總結各種容器特點

STL之容器 選擇時機,刪除元素,迭代器失效

一.種類 值得注意的是,陣列可以和 stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住 remove 演算法後,要加上 erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為 remove 並不知道它現在作用於哪個容器,所以 remove 演算...

STL之容器 選擇時機,刪除元素,迭代器失效

一.種類 值得注意的是,陣列可以和 stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住 remove 演算法後,要加上 erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為 remove 並不知道它現在作用於哪個容器,所以 remove 演算...

STL容器 刪除元素,迭代器失效,選擇時機

一.種類 值得注意的是,陣列可以和 stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住 remove 演算法後,要加上 erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為 remove 並不知道它現在作用於哪個容器,所以 remove 演算...