Насколько полезен std::list в С++

Я относительно новичок в программировании и начал изучать std::list и с одной стороны у него есть удобства по типу push_front и т.д. и мне стало интересно насколько std:list полезен и где используется

Такое ощущение что std::vector намного лучше и удобнее чем std::list


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

vector полезнее list. Термин "полезнее" сам по себе бесполезен, не несёт никакой смысловой нагрузки. Вместо "полезнее" можно сказать что vector используется гораздо чаще, чем list. В большинстве задач vector – первый выбор, и только если вы получили измеримое свидетельство недостаточной производительности (программа тормозит), его можно попробовать заменить на другой контейнер и проверить что производительность выросла (программа тормозит меньше, или не тормозит вовсе).

Есть несколько примеров алгоритмов, в которых список лучше вектора.

  1. Необходимо хранить указатели/итераторы на элементы контейнера даже когда контейнер меняет размер. vector при изменении размера может перенести все элементы в другую область памяти, что сделает все итераторы и указатели на элементы невалидными. list сохраняет любой итератор вечно.
    Конкретно это свойство используется в реализации хэш-таблицы, которая помнит порядок вставки элементов при итерации. Вот вопрос по Java, но если вы возьмётесь решать эту задачу на C++, получите решение с list, vector тут не подойдёт.

  2. Задачи в которых надо реализовать быструю вставку элементов в середину контейнера. Например, олимпиадная задача в которой надо симулировать быструю вставку в середину. Список вне конкуренции.

  3. Списки позволяют быстро переносить (не копировать) диапазоны элементов: splice. Вектора так не умеют.

→ Ссылка