为什么list.end()-不减少迭代器?

时间:2020-04-19 16:00:14

标签: c++ iterator

所以我想了解迭代器的概念。

int main()
{
    std::list<int> mylist;
    std::list<int>::iterator it1;
    std::list<int>::iterator it2;
    mylist.push_back(1);
    it1 = mylist.end()--;
    mylist.push_back(2);
    it2 = mylist.end();
    it2--;
    std::cout << "first: " << *it1 << std::endl;
    std::cout << "second: " << *it2 << std::endl;
}

输出:

first: 2 second: 2

但是我期望1、2。我读过-重载了迭代器的运算符,并将迭代器“移动”到左侧。那么it1 = mylist.end()--;it1 = mylist.end(); it1--;之间的区别到底在哪里?因为it1--;返回预期的1和2。

1 个答案:

答案 0 :(得分:2)

列表成员end函数按值返回一个迭代器。

所以在这个片段中

it1 = mylist.end()--;

后递增运算符应用于.end() 之后返回的临时变量,并将其分配给it1。因此it1等于.end()

在第二个片段中

it2 = mylist.end();
it2--;

您正在递减it2,因此您指向.end()之前的一个位置。