std::vector<int> array;
array.push_back(1);
array.push_back(2);
array.push_back(3);
array.push_back(4);
array.push_back(5);
for (int i = 0; i < array.size(); i++) {
if(array[i]==2 || array[i]==5) {
array.erase(array.begin() + i);
printf("### REMOVED ###\n", array[i], i);
}
printf("inside val: %d | index: %d\n", array[i], i);
}
但你可以看到,它輸出:
inside val: 1 | index: 0
### REMOVED ###
inside val: 3 | index: 1
inside val: 4 | index: 2
### REMOVED ###
inside val: 5 | index: 3
,當我的 「期望」 是:
inside val: 1 | index: 0
### REMOVED ###
inside val: 2 | index: 1
inside val: 3 | index: 2
inside val: 4 | index: 3
### REMOVED ###
inside val: 5 | index: 4
爲 「混亂」 索引/數組的大小,因爲它會改變目標的內存指針和大小。
我的習慣是使用foreach statement
和iterate a collection (C#/.Net
),即使我在迭代過程中刪除/添加元素,下一個總是從開始列表開始的下一個元素。
你會怎麼做C++
?
你的代碼你在C#中有一個例子嗎? – TAS
@TAS:sure:http://rextester.com/EZMYM12731 – markzzz
雖然你的問題已經足夠清晰,可以回答,但是你不會在你的C#代碼片段中執行任何刪除操作? – Quentin