Шрифт:
ваш (правильный) код будет несправедливо отвергнут компилятором, если итераторы относятся к разным типам. Обходное решение остается прежним (перестановка
Простейшая страховка от подобных проблем заключается в том, чтобы свести к минимуму использование разнотипных итераторов, а это в свою очередь подсказывает, что вместо
Совет 27. Используйте distance и advance для преобразования const_iterator в iterator
Как было сказано в совете 26, некоторые функции контейнеров, вызываемые с параметрами-итераторами, ограничиваются типом
Я знаю, о чем вы думаете. «Если ничего не помогает, берем кувалду», не так ли? В мире C++ это может означать лишь одно: преобразование типа. Стыдитесь. И где вы набрались таких мыслей?
Давайте разберемся с вредным заблуждением относительно преобразования типа. Посмотрим, что происходит при преобразовании
В приведенном примере используется контейнер
Почему же для этих типов контейнеров преобразование не компилируется? Потому что
Впрочем, некомпилируемое преобразование все же может откомпилироваться, если итераторы относятся к контейнеру
Если у вас имеется доступ к контейнеру, от которого был взят
Решение выглядит настолько простым и прямолинейным, что это невольно вызывает подозрения. Чтобы получить