Что будет быстрее при последовательной итерации по одинаковым элементам: std::list или std::vector, и почему?

При последовательном обходе обычно быстрее vector: элементы лежат рядом, что помогает кешу и предвыборке. У list требуется переход по указателям между отдельными узлами.

Короткий ответ

Что ответить на собеседовании

При последовательном обходе обычно быстрее vector: элементы лежат рядом, что помогает кешу и предвыборке. У list требуется переход по указателям между отдельными узлами.

Подробный разбор

Ответ с пояснениями

При последовательном обходе обычно быстрее vector: элементы лежат рядом, что помогает кешу и предвыборке. У list требуется переход по указателям между отдельными узлами.

Для обоих контейнеров полный обход имеет сложность O(n), но стоимость доступа к памяти различается. Узлы list дополнительно хранят связи и могут быть разбросаны по памяти; процессор хуже скрывает задержки зависимых чтений.

Результат зависит от размера элементов, аллокатора и работы внутри цикла, поэтому для критичного кода нужен замер. Преимущества list связаны с другими операциями и стабильностью ссылок, а не с простым обходом. Асимптотическая одинаковость не означает одинаковой фактической скорости.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее