【发布时间】:2016-07-25 10:26:49
【问题描述】:
这是my code:
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:当然:rextester.com/EZMYM12731
-
尽管您的问题很清楚可以回答,但您没有在 C# sn-p 中执行任何删除操作?
标签: c++ for-loop foreach iteration cycle