c++ - 当迭代器发生变化时,对迭代器对象的引用发生变化

标签 c++ iterator

我正在从事一个项目,该项目包括遍历一个充满类对象指针的 vector 。我想要做的是保存指向我正在寻找的 2 个对象的指针。我可以找到对象,使用两个 if 循环将它们保存到类指针变量中,然后……发生了一些事情。在 for 循环的末尾,我的变量持有对 Vector 末尾的引用,指向那里列出的最后一个对象。

我想那是因为我持有指向迭代器本身的指针,而不是 vector 中的特定对象,但我不知道如何解决这个问题。我尝试重新设置两个不同的 for 循环并在找到对象时使用 break,但是当我尝试时,第一个指针仍然与第二个指针相同,即使它们不再位于 vector 的末尾。我还尝试在我的类(保存在 vector 中的那个)中创建返回“this”指针的函数,我想用它来将它的地址保存在我的变量中,但它没有帮助。

Listing* a;
Listing* b;

for (auto it : data){
    if(it.getName()==first){
        a = ⁢
        break;
    }
}

for (auto it : data){
    if(it.getName()==second){
        b = ⁢
        break;
    }
}

我检查过,我确信 if 条件只满足一次,所以它肯定不是“可能每次都进入 if” 我希望 a 和 b 持有指向 vector 中特定对象的指针,而不是具有相同/enf 的 vector 值

最佳答案

I guess thats because I hold pointers to iterator itself instead of specific object in my vector, but I have no idea how to fix that

是的。 在您退出循环后立即不存在 - 所以您将面临未定义的行为,这意味着您的程序可能会做任何事情 - 通常不是您想要的。

请注意, 不是迭代器,它是 vector 对象的拷贝

您希望循环读取:

for (auto& it : data){
    if(it.getName()==first){
        a = ⁢
        break;
    }
}

更好的是,你会想要使用 std::findstd::find_if,它们就是为此而生的。

关于c++ - 当迭代器发生变化时,对迭代器对象的引用发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56435082/

相关文章:

javascript - 迭代 JSON 对象时出现问题

python - 如何跟踪具有特定颜色的矩形

c++ - 跨平台崩溃报告器

c++ - clang++ - 将模板类名视为类范围内的模板

java迭代器无法应用于for_each

c++ - 如何确保迭代器模板参数与模板类的模板参数具有相同的数据类型

c++ - move 和模板化构造函数,取错了

c++ - G++:可以将 __attribute__((__may_alias__)) 用于指向类实例而不是类定义本身的指针吗?

c++ - 在列表中查找特定项目

java.lang.IllegalStateException : null with iterator