Вектор против списка в соответствии с Stroustrup [дубликат]

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

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

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

относительные показатели СТД::вектора и СТД::список и СТД::slist, для того?

и

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

и теперь, по словам Страуструпа, я ошибался.

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

1 ответов


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