Я провел 3 разных эксперимента с использованием списков и векторов C ++.
Те, у кого были векторы, оказались более эффективными, даже когда в центре было много вставок.
Отсюда вопрос: в каком случае списки имеют больше смысла, чем векторы?
Если векторы кажутся более эффективными в большинстве случаев, и учитывая, насколько похожи их члены, то какие преимущества остаются для списков?
Создайте N целых чисел и поместите их в контейнер, чтобы контейнер оставался отсортированным. Вставка была выполнена наивно, читая элементы один за другим и вставляя новый прямо перед первым большим.
Со списком время проходит через крышу, когда размерность увеличивается по сравнению с векторами.Вставьте N целых чисел в конце контейнера.
Для списков и векторов время увеличилось на тот же порядок, хотя с векторами оно было в 3 раза быстрее.Вставьте N целых чисел в контейнер.
Запустить таймер.
Сортируйте контейнер, используя list.sort для списков и std :: sort для векторов. Стоп таймер.
Опять же, время увеличивается на тот же порядок, но с векторами оно в среднем в 5 раз быстрее.
Я мог бы продолжить выполнять тесты и найти пару примеров, где списки оказались бы лучше.
Но совместный опыт чтения вами этого сообщения, ребята, может дать более продуктивные ответы.
Возможно, вы сталкивались с ситуациями, когда списки были удобнее в использовании или работали лучше?
list
, Вероятно , делает лучше , если вы удаляете много элементов. Я не верю, vector
что когда-нибудь будет возвращена память в систему, пока не будет удален весь вектор. Также имейте в виду, что ваш тест № 1 не проверяет только время вставки. Это тест, сочетающий поиск и вставку. Это поиск места для вставки, где list
медленно. Фактическая вставка будет быстрее, чем вектор.