Разбираем, почему одинаковая асимптотика (
O(N)) ещё не гарантирует одинаковую скорость: как CPU-кэш и линии кэша «любят» подряд лежащие элементы, почему
std::vector с непрерывной памятью часто выигрывает у
std::list (узлы и прыжки по памяти), где находится компромисс
std::deque, и как почувствовать локальность на практике (печать адресов, линейные проходы, аккуратный стиль итерации). В конце — типичные ошибки оптимизации: слепая вера в
O(1), выводы по одному эксперименту и игнорирование правил инвалидирования ссылок у
vector.