Когда вы используете индекс для выполнения по существу последовательного доступа к контейнеру (std::vector
или чего-либо еще), вы накладываете требование произвольного доступа на базовую структуру данных, когда на самом деле вам не нужен такой доступ в вашем алгоритме. Требуется произвольный доступ - довольно сильное требование по сравнению со значительно более слабым требованием последовательный доступ . Установление более строгих требований без уважительной причины является серьезной ошибкой проектирования.
Таким образом, правильный ответ на ваш вопрос: используйте последовательный (итераторный) доступ всякий раз, когда вы можете, используйте случайный (индексный) доступ только тогда, когда это абсолютно необходимо. Старайтесь по возможности избегать доступа к индексам.
Если ваш алгоритм критически полагается на контейнер, являющийся случайным образом доступным , он становится внешним требованием алгоритма. В этом случае вы можете использовать индексный доступ без каких-либо оговорок. Однако, если возможно реализовать тот же алгоритм с использованием только итераторов, рекомендуется придерживаться только итераторов, т. Е. Полагаться исключительно на последовательный доступ.
Конечно, вышеприведенное правило, хотя и истинно, имеет смысл только в коде, является универсальным в определенной степени. Если какая-то другая часть кода настолько специфична , что вы точно знаете, что структура данных, с которой вы работаете, равна std::vector
и всегда будет std::vector
, то метод доступа больше не будет вопросы. Используйте то, что вы предпочитаете. Однако я бы по-прежнему избегал доступа к индексам в ситуациях, когда последовательный доступ вполне достаточен.