Что оператор ++ делает на прямом итераторе - PullRequest
1 голос
/ 23 апреля 2020

Насколько я понимаю, std::unordered_map и std::unordered_set используют прямые итераторы.

Я мог бы сделать что-то подобное

auto it = unordered_map_instance.begin(); 
it++; 

Но я не могу сделать что-то подобное

auto it = unordered_map_instance.begin(); 
it = it + 1; 

Я всегда думал, что ++ просто увеличивается на 1, но это не так с прямыми итераторами. Может кто-нибудь объяснить, что ++ делает для прямых итераторов? Я не могу гуглить этого оператора. +

1 Ответ

4 голосов
/ 23 апреля 2020

Если вы ссылаетесь на [iterator.requirements] из стандарта C ++, iterator требует перегрузки operator++()operator++(int) для большинства типов). Их не следует путать с operator+(int), что будет эквивалентом вашего второго примера. Оператор ++ равен , а не так же, как сложение.

Что на самом деле делает operator++(), он просто перемещается вперед на один в списке, то есть к следующему элементу , Например:

std::map<int,int> map_instance = { { 1,1 }, {2,2}, {3,3} };
auto it = map_instance.begin(); // it points to {1,1}
it++;  // now it points to {2,2}

Увеличение более чем на один можно сделать с помощью std::advance

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