почему list.end () не уменьшает значение итератора? - PullRequest
0 голосов
/ 19 апреля 2020

, поэтому я пытаюсь понять концепцию Итераторов.

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 Ответ

2 голосов
/ 19 апреля 2020

Член списка end Функция возвращает итератор по значению.

Таким образом, в этом фрагменте

it1 = mylist.end()--;

оператор постинкремента применяется к временному значению, возвращаемому .end() после того, как присвоено it1. Так что it1 в точности равно .end().

Во втором фрагменте

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

вы уменьшаете it2, поэтому вы указываете на одну позицию перед .end() .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...