@Junior007

Когда вообще используется этот List?

Пытаюсь понять преимущества структуры std::list, вроде как написано, что она способна быстро выполнять вставку в середину, но протестив на Ideone: ideone.com/oFQeXE
List - Явный аутсайдер. Жрет кучу памяти, заполняется в разы медленней вектора, так еще и саму вставку выполняет долго.

Vector - 0.2 sec (полное выполнение за: 0.42)
List - 0.11 sec (2.44)

Когда же тогда он применяется?
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ответы на вопрос 3
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Ваш эксперимент далёк от идеала. Сделайте примерно 1000 одинаковых экспериментов и возьмите среднее + если мы измеряете время вставки, то ненадо учитывать время заполнения контейнера. Надо вызвать resize у вектора и листа, заполнить их (не push_back'ом), а потом измерить время вставки, и так примерно 1000 раз, каждый раз с новым вектором и листом. И время замерять, после того как вы получили итератор на нужное место в листе, а не до. Т.е. только время вставки.
Про оптимизации пока умолчим.

Применяется лист в зависимости от данных и используемых алгоритмов. Где актуальны приемущества листа (читайте документацию, какие), там и применяется. + еще надо уметь пользоваться контейнерами (а то потом начнется про то что, например, вектор работает медленно и памяти много жрет или что в листе долгий доступ по индексу).

PS Время так можно замерять: en.cppreference.com/w/cpp/chrono
Ответ написан
Rou1997
@Rou1997
У меня ни тот, ни другой не применяется, я использую System.Collections.Generic.List, TList или QList, еще NewStringUTF, а старье "раритет" не нужен когда у меня все равно в проекте задействовано что-то более современное и удобное, а единственное преимущество STL-"раритетов" для меня кроссплатформенность и независимость от библиотек, тогда из этих 2 для меня лучше std::vector т.к. поддерживает оператор [], а вообще крайне редко такое требуется, и я все это могу объяснить своими практическими задачами на работе, а у вас преимущества похоже просто "из пальца высосаны", так что вопрос не имеет смысла, объясните зачем вам такое быстродействие?
Ответ написан
У вас получился тест на линейное заполнение контейнера. Одна вставка в середину на результаты не повлияет и разницы между list и vector вы не увидите. Попробуйте вставлять элементы в начало контейнера - картинка будет совсем другой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы