Подтвердить что ты не робот

Вектор против списка в соответствии с Stroustrup

Возможный дубликат:
Когда вы предпочитаете использовать std:: list <T> вместо std::vector <T> ?

Я просто смотрел запись разговоров GoingNative'12 от Bjarne Stroustrup. И я немного смущен.

В этом разговоре он в частности обсуждает вопрос vector vs list и предполагает, что во многих случаях vector быстрее, даже если вы вставляете и удаляете интенсивно в/из середины, поскольку компиляторы могут оптимизировать много вещи и подобные компактные структуры. И вывод (как я понимаю) заключается в следующем: сначала используйте vector, а позже подумайте, нужно ли вам что-то еще. Это звучит разумно, но с учетом первого наблюдения, какие критерии я должен учитывать? Я всегда думал, что если вы вставляете/удаляете интенсивно - используйте список. Подобные вещи предлагаются в некоторых темах здесь. См

Относительная производительность std::vector против std:: list vs. std:: slist?

и

вектор против списка в STL

И теперь, согласно Страуструпу, я ошибся.

Конечно, я могу написать пару тестов и попытаться выяснить, что использовать в каждой конкретной ситуации, но есть ли теоретический путь?

4b9b3361

Ответ 1

Важнейшей мотивацией для предпочтения std::list over std::vector является правильность итераторов, а не производительность. Если в то время, когда вы вставляете или стираете, у вас есть другие итераторы в контейнере, тогда вам, вероятно, понадобится std::list, так как вставка не делает недействительными любые итераторы, и стирание только отменяет итераторы для стираемого элемента. Только в тот момент, когда std::list победит в производительности, когда копия и назначение чрезвычайно дороги, и в таких случаях часто лучше выбирать модифицированный класс, чтобы уменьшить стоимость копирования и назначения, вместо перехода на std::list.