C 順序容器 swap之後迭代器指標問題

2021-10-09 15:44:06 字數 1451 閱讀 1999

測試用例:

vector<

int> a =

; vector<

int> b =

;auto it = a.

begin()

;auto ii = b.

begin()

; cout <<

"a的第乙個是"

<<

*it << endl;

cout <<

"b的第乙個是"

<<

*ii << endl;

swap

(a, b)

; cout <<

"交換後a的第乙個是"

<<

*it++

<< endl;

cout <<

"a的第二個是"

<<

*it << endl;

cout <<

"b的第乙個是"

<<

*ii++

<< endl;

cout <<

"交換後b的第二個是"

<<

*ii << endl;

// 實際輸出15

1256

以上說明,swap後 指向這幾個容器的迭代器不會失效,仍然指向swap之前所指向的那些元素值(可以理解為跟隨元素的移動而移動),只不過他們所屬的容器已經發生了改變

測試用例:

array<

int,

6> a =

; array<

int,

6> b =

;auto it = a.

begin()

;auto ii = b.

begin()

; cout <<

"a的第乙個是"

<<

*it << endl;

cout <<

"b的第乙個是"

<<

*ii << endl;

swap

(a, b)

; cout <<

"交換後a的第乙個是"

<<

*it++

<< endl;

cout <<

"a的第二個是"

<<

*it << endl;

cout <<

"b的第乙個是"

<<

*ii++

<< endl;

cout <<

"交換後b的第二個是"

<<

*ii << endl;

//實際輸出結果17

7812

以上結果說明,對於array容器,迭代器指標指向的是對應的元素位置,而不是元素值。在swap之後,迭代器仍然指向原先的元素位置,(可以理解為指向固定位置,不隨元素值的改變而變化)。

順序容器迭代器之鄙見

眾所周知當使用乙個容器的insert或者erase函式通過迭代器插入或刪除元素 可能 會導致迭代器失效,因此很多建議都是讓我們獲取insert或者erase返回的迭代器,以便用重新獲取新的有效的迭代器進行正確的操作 view plaincopy to clipboardprint?iter vec....

c 容器演算法迭代器初識 容器演算法迭代器

c 容器演算法迭代器初識 容器演算法迭代器 stl中最常用的為迭代器vector,可以理解為陣列,下面我們將學習如何向這個容器 中插入資料 並遍歷這個容器 容器 vector 演算法 for each 迭代器 vector iteator include include include using ...

c 容器迭代器問題

一 迭代器失效問題 對於節點式容器 map,list,forward list,set 元素的刪除,插入操作會導致指向該元素的迭代器,指標,引用失效,但是其他元素迭代器,指標,引用不受影響 對於順序式容器 vector,string 元素的插入肯定會導致指向該元素以及後面的元素迭代器,指標,引用失效...