所以我想了解迭代器的概念。
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。
答案 0 :(得分:2)
列表成员end函数按值返回一个迭代器。
所以在这个片段中
it1 = mylist.end()--;
后递增运算符应用于.end()
之后返回的临时变量,并将其分配给it1
。因此it1
等于.end()
。
在第二个片段中
it2 = mylist.end();
it2--;
您正在递减it2
,因此您指向.end()
之前的一个位置。