C 迴圈list刪除自己本身的集合

2021-10-10 19:41:19 字數 1140 閱讀 5247

如果從頭到尾正序遍歷刪除的話,有些符合刪除條件的元素會成為漏網之魚;

正序刪除舉例:

list<

string

> templist =

newlist

<

string

>()

;for

(int i =

0; i < templist.count; i++)}

templist.

foreach

(p =

>

);

控制台輸出結果:a,b,b,c

有兩個2沒有刪除掉;

這是因為當i=1時,滿足條件執行刪除操作,會移除第乙個b,接著第二個b會前移到第乙個b的位置,即游標1對應的是第二個b。

接著遍歷i=2,也就跳過第二個b。

用for倒序遍歷刪除,從尾到頭

list<

string

> templist =

newlist

<

string

>()

;for

(int i = templist.count-

1; i>=

0; i--)}

templist.

foreach

(p =

>

);

控制台輸出結果:a,c,

這次刪除了所有的b;

使用遞迴,每次刪除以後都從新foreach,就不存在這個問題了;

static

void

main

(string

args)

;removetest

(templist)

; templist.

foreach

(p =

>);

}static

void

removetest

(list<

string

> list)

}}

迴圈list刪除自己本身的集合

控制台輸出結果 a,b,b,c 有兩個2沒有刪除掉 這是因為當i 1時,滿足條件執行刪除操作,會移除第乙個b,接著第二個b會前移到第乙個b的位置,即游標1對應的是第二個b。接著遍歷i 2,也就跳過第二個b。list templist new list for int i templist.count...

迴圈中刪除List中的元素

remove 方法刪除元素後會立刻更新list的size,因此index也發生了變化,會導致漏掉某些元素。for int i 0 i解決方案一 在刪除某乙個元素後直接break,當然這種情況只適合刪除乙個特定元素,不適合刪除多個元素 解決方案二 index回退一位,如下 for int i 0 i刪...

關於list迴圈刪除元素,迭代器失效的問題

問題的關鍵是 在刪除元素之前,將當前迭代器儲存下來。當然,這裡僅支援list,因為list的鏈式的刪除乙個元素,前面的指標指向下乙個元素,vector和queue就不好辦了,它們或者是線性的或者是半線性半鏈式,迭代器會失效 include includeusing namespace std int...