【发布时间】:2011-03-21 16:49:39
【问题描述】:
我想循环遍历一个向量并擦除与某个条件相对应的某些元素,例如:
vector<int> myvector;
vector<int>::iterator it;
myvector.push_back(1);
myvector.push_back(2);
myvector.push_back(3);
myvector.push_back(4);
for(it = myvector.begin(); it != myvector.end(); ++it){
if((*it) == 4){
it = myvector.erase(it);
}
}
现在这工作正常,除非标准像上面的代码那样删除最后一项。你如何避免这种行为?
谢谢。
编辑------------------------------------
现在我循环遍历它的原因是实际上有 4 个向量我需要从中删除元素(但标准只针对一个向量):
这种情况下,这是怎么走的?
vector<int> myvector;
vector<int> myvector2;
vector<int> myvector3;
vector<int> myvector4;
vector<int>::iterator it;
vector<int>::iterator it2;
vector<int>::iterator it3;
vector<int>::iterator it4;
myvector.push_back(1);
myvector.push_back(2);
myvector.push_back(3);
myvector.push_back(4);
(假设 myvector2/3/4 里面有值)
it2 = myvector2.begin()
it3 = myvector3.begin()
it4 = myvector4.begin()
for(it = myvector.begin(); it != myvector.end();){
if((*it) == 4){
it = myvector.erase(it);
it2 = myvector2.erase(it2);
it3 = myvector3.erase(it3);
it4 = myvector4.erase(it4);
}
else{
++it;
++it2;
++it3;
++it4;
}
}
在这种情况下是否对擦除/删除习语进行了修改?
【问题讨论】:
-
"现在这工作正常,除非条件删除最后一项。"不,它没有。每当您擦除元素时,它都有未定义的行为。 (只是想我会提到这一点;其他人已经发布了正确的解决方案。)