我正在从事一个项目,该项目包括遍历一个充满类对象指针的 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::find
或 std::find_if
,它们就是为此而生的。
关于c++ - 当迭代器发生变化时,对迭代器对象的引用发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56435082/