迭代器执行操作时,对迭代器对象的引用会发生变化

时间:2019-06-03 22:03:16

标签: c++ iterator

我正在研究一个项目,该项目包括遍历填充有指向类对象的指针的向量。我想要做的是保存指向我正在寻找的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的矢量值

1 个答案:

答案 0 :(得分:1)

  

我猜那是因为我持有指向迭代器本身的指针,而不是向量中的特定对象,但是我不知道如何解决这个问题

是的。 it一旦退出循环就不存在-因此您将面临未定义的行为,这意味着您的程序可以执行任何操作-通常不是您想要的。

请注意,it不是迭代器,它是矢量对象的副本

您希望循环阅读:

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

更好的是,您想要使用std::findstd::find_if,它们是为此而设计的。