==如何在c++列表迭代器上工作

How == works on c++ list iterator?

本文关键字:迭代器 工作 列表 c++      更新时间:2023-10-16

我想知道,操作符==如何在list::迭代器上工作。我有一个指针列表(没有重复)和两个迭代器,它们应该指向该列表中的同一位置。当我用==(或!=)直接比较迭代器时,我得到了不等式,但当我比较它们指向的值时,我得到了相等。我也尝试了list.erase,然后得到了相同的结果。

的例子:

list<VirtVertex *> blockList;
void initBlockList(){
    /* somehow fill blockList */
    for(auto it = blockList.begin(); it != blockList.end(); ++it)
         (*it)->BLPosition = it;
}
for(auto it = blockList.begin(); it != blockList.end(); ++it){
    if(it == (*it)->BLPosition)
        cout << "OK";  //no "OK" printed
    if(*it == *((*it)->BLPosition))
        cout << "OK";  //got "OK" everytime
}

我想知道,operator ==是如何在list::iterator上工作的。

operator==list::iterator的操作如您所期望的那样:如果迭代器指向列表中相同位置的相同元素,或者它们都是end s,则返回true。

当我用==(或!=)直接比较迭代器时,我得到了不相等,但当我比较它们指向的值时,我得到了相等。

这是完全有效的,因为std::list可以包含重复项。

如果两个迭代器指向同一容器的同一元素(或指向容器的末端),则它们比较相等。这对所有容器都是正确的,包括list

比较迭代器指向或引用的值与比较迭代器不同。对于像list这样可以包含具有相同值的多个(重复)元素的容器,两个迭代器可以比较不相等的元素,但它们引用的值可以相同。显然,如果两个迭代器比较结果相等,并且它们不是end迭代器,则它们引用的值比较结果也相等(假设元素/类型具有适当的比较操作符)。

list.erase()使list的现有迭代器无效,因此使用先前获得的迭代器会产生未定义的行为。但是,随后从列表中获得的新迭代器将具有相同的属性。