Насколько полезен std::list в С++
Я относительно новичок в программировании и начал изучать std::list и с одной стороны у него есть удобства по типу push_front и т.д. и мне стало интересно насколько std:list полезен и где используется
Такое ощущение что std::vector намного лучше и удобнее чем std::list
Ответы (1 шт):
vector полезнее list. Термин "полезнее" сам по себе бесполезен, не несёт никакой смысловой нагрузки. Вместо "полезнее" можно сказать что vector используется гораздо чаще, чем list. В большинстве задач vector – первый выбор, и только если вы получили измеримое свидетельство недостаточной производительности (программа тормозит), его можно попробовать заменить на другой контейнер и проверить что производительность выросла (программа тормозит меньше, или не тормозит вовсе).
Есть несколько примеров алгоритмов, в которых список лучше вектора.
Необходимо хранить указатели/итераторы на элементы контейнера даже когда контейнер меняет размер.
vectorпри изменении размера может перенести все элементы в другую область памяти, что сделает все итераторы и указатели на элементы невалидными.listсохраняет любой итератор вечно.
Конкретно это свойство используется в реализации хэш-таблицы, которая помнит порядок вставки элементов при итерации. Вот вопрос по Java, но если вы возьмётесь решать эту задачу на C++, получите решение сlist,vectorтут не подойдёт.Задачи в которых надо реализовать быструю вставку элементов в середину контейнера. Например, олимпиадная задача в которой надо симулировать быструю вставку в середину. Список вне конкуренции.
Списки позволяют быстро переносить (не копировать) диапазоны элементов:
splice. Вектора так не умеют.