我要循环通过一个向量和擦除对应于一个特定标准的某些元素,例如:通过它循环擦除向量的最后一个元件
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;
}
}
是否有一个修改到擦除/删除成语在这种情况下有效?
“现在这个工作正常,除非标准擦除最后一项。” 不,它不。每次删除 元素时,它都有未定义的行为。 (只是以为我会提到这一点;其他人发布了 正确的解决方案。) – 2011-03-21 18:09:29