我正在研究一个项目,该项目包括遍历填充有指向类对象的指针的向量。我想要做的是保存指向我正在寻找的2个对象的指针。我可以找到对象,使用两个if循环将它们保存到类指针变量中,然后...发生了某些事情。在for循环的末尾,我的变量引用了Vector的末尾,并引用了那里列出的最后一个对象。
我猜那是因为我持有指向迭代器本身的指针,而不是向量中的特定对象,但是我不知道如何解决这个问题。我尝试创建两个不同的for循环,并在找到对象时使用break,但是尝试时,第一个指针仍然与第二个指针相同,即使它们不再位于向量的末尾。我还尝试在我的类中创建一个函数(该函数保存在向量中),该函数返回“ 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条件仅满足一次,因此肯定不是“也许每次都会进入” 我希望a和b可以保存指向矢量中保存的特定对象的指针,而不是具有相同/ enf的矢量值
答案 0 :(得分:1)
我猜那是因为我持有指向迭代器本身的指针,而不是向量中的特定对象,但是我不知道如何解决这个问题
是的。 it
一旦退出循环就不存在-因此您将面临未定义的行为,这意味着您的程序可以执行任何操作-通常不是您想要的。
请注意,it
不是迭代器,它是矢量对象的副本。
您希望循环阅读:
for (auto& it : data){
if(it.getName()==first){
a = ⁢
break;
}
}
更好的是,您想要使用std::find
或std::find_if
,它们是为此而设计的。