我正在尝试执行以下操作:
myvec 是 Couple 对象的 vector (每个对象由一个 EntityA 和一个 EntityB 组成)。 我正在尝试删除重复的夫妇.. 无论如何,有时以下代码会因 it2 越界而崩溃。 条件很好,迭代器好像不行
if(myvec.size()>1)
for(vector<Couple>::iterator it1 = myvec.begin(); it1+1 !=myvec.end();){
for(vector<Couple>::iterator it2 = it1+1; it2 !=myvec.end();){
if((it1->EntityA!=it2->EntityA&&it1->EntityA!=it2->EntityB)||
(it1->EntityB!=it2->EntityA&&it1->EntityB!=it2->EntityB)){
it2++;
}
else{
myvec.erase(it2);
}
}
it1++;
}
任何解决方案/替代方案?
最佳答案
尽可能使用现有的库函数。您将需要提供一个二进制谓词函数,或提供一个 operator<
和 operator==
为你的 Couples
对象。
std::sort(myvec.begin(), myvec.end());
myvec.erase(std::unique(myvec.begin(), myvec.end()), myvec.end());
但是,您最好拥有一个自动避免重复的容器,例如 std::set
. This is a related question, with an excellent answer.
关于C++迭代器双循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460336/