vector和list之erase 的用法區別

2022-07-30 11:06:16 字數 1389 閱讀 3996

這兩種容器,由於底層不同,因此erase()的使用也會有所不同:對於vector來說,用erase()刪除其中的乙個元素後,它的迭代器會自增1,而list不會。以乙個例子來說明:

要求實現:有乙個陣列a[n]順序存放0~n-1,要求每隔兩個數刪掉乙個數,到末尾時迴圈至開頭繼續進行,求最後乙個被刪掉的數的原始下標位置。以8個數(n=7)為例:{0,1,2,3,4,5,6,7},0->1->2(刪除)->3->4->5(刪除)->6->7->0(刪除),如此迴圈直到最後乙個數被刪除。(華為2016研發工程師程式設計題-刪數)

輸入:8

輸出:6

1 #include 2 #include 3

using

namespace

std;45

intmain()615

16 vector::iterator it =v.begin();

17while (v.size() > 1

) 23 vector::iterator deleten =it;

24 ++it;

25if (it ==v.end())

26 it =v.begin();

27//

it = deleten+1

28v.erase(deleten);

29//

cout<<*it<30}31

32 cout << *it <34return0;

35 }

1 #include 2 #include 3

using

namespace

std;45

intmain()615

16 vector::iterator it =v.begin();

17while (v.size() > 1

) 23 vector::iterator deleten =it;

24//

++it;

25if (it+1 ==v.end())

26 it =v.begin();

27//

it = deleten+1

28v.erase(deleten);

29//

cout<<*it<30}31

32 cout << *it <34return0;

35 }

在實際應用中:

如果需要高效的訪問操作,選擇vector,如果有大量的插入刪除操作,選擇 list。

所以本題最好用list實現,用在此處只是為了辨別vector和list使用erase()的區別。

list和用vector區別

list和用vector區別 stl提供了三個最基本的容器 vector,list,deque vector和 built in 陣列類似,它擁有一段連續的記憶體空間,並且起始位址不變,因此它能非常好的支援隨即訪問,即 操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷...

list和用vector區別

stl提供了三個最基本的容器 vector,list,deque。vector和built in陣列類似,它擁有一段連續的記憶體空間,並且起始位址不變,因此它能非常好的支援隨即訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝,另外,當該陣列後的記憶體空間不夠...

list和vector的區別

vector和built in陣列類似,它擁有一段連續的記憶體空間,並且起始位址不變,因此它能夠非常好的支援隨機訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝。另外,當該陣列後的記憶體空間不夠時,需要重新申請一塊足夠大的記憶體並進行記憶體的拷貝。這些都大大...