C++迭代器双循环

标签 c++ loops stl iterator

我正在尝试执行以下操作:

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/

相关文章:

c++ - 使用步幅获取 std::vector 的最大元素

c++ - 如果多映射中与其关联的 vector 为空,则删除该键

键不存在时对象的 C++ 映射删除

c++ - CMake 包含非 cmake 库的第三方 header

java - 如何检查正在循环的字符串的最后一个索引

python - 将不同列表中的选定项目组合成一个新项目

java - 查找文本文件中 3 个重复出现的姓名(人)的总收入

c++ - std::list 中动态分配的数组导致内存泄漏

c++ - 将 fwrite() 和 fread() 与 malloc 和 realloc 一起使用

c++ - C++是否包含了整个C语言?