могу ли я увеличить итератор на целое число?

На этот вопрос уже есть ответ:

Всего 2 ответа


Вы можете сделать «арифметику указателя» на итераторе только в том случае, если это итератор с произвольным доступом. Итераторы std::set , std::multiset , std::map и std::multimap не являются итераторами произвольного доступа. Для эффективной работы «increment by n » для итератора карты потребуется некоторая дополнительная бухгалтерская отчетность в структуре красно-черного дерева, что добавит накладные расходы для всех пользователей. Это редко требуемая операция, поэтому она не поддерживается в стандартной библиотеке.

Вы можете сделать это медленным способом с помощью std::next(m.begin(), n) . Это просто увеличивает копию итератора n раз и возвращает результат.


Вы можете использовать std::advance() или std::next() для этого:

std::map<int, int> m;
...
for (auto iter = next(m.begin(), 3); iter != m.end(); ++iter)
{
}

И std::advance() и std::next() ведут себя оптимально независимо от типа итератора. Если вы передадите им итератор с произвольным доступом, они будут использовать operator + () . В противном случае они будут использовать operator ++ () .


Есть идеи?

10000