Вектор против списка в соответствии с Stroustrup [дубликат]
Возможные Дубликаты:
когда вы предпочитаете использовать std::list вместо std:: vector?
Я просто смотрел запись GoingNative'12 говорить Бьярн Страуструп. И я немного запутался.
в этом разговоре он, в частности, обсуждает vector
vs list
вопрос и предположить, что во многих случаях vector
быстрее, даже если вы вставляете и удаляете интенсивно в / из середины, как компиляторы можно оптимизировать много вещей и как компактные структуры. И вывод (как я понимаю): сначала используйте vector
а потом подумайте, нужно ли вам что-то другое. Это звучит разумно, но, принимая во внимание первое наблюдение, какие критерии я должен учитывать? Я всегда думал,что если вы вставляете / удаляете интенсивно-используйте список. Подобные вещи предлагаются в некоторых темах здесь. См.
относительные показатели СТД::вектора и СТД::список и СТД::slist, для того?
и
и теперь, по словам Страуструпа, я ошибался.
конечно, я могу написать пару тестов и попытаться выяснить, что использовать в каждой конкретной ситуации, но есть теоретическая возможность?
1 ответов
самая важная мотивация для предпочитающих std::list
над std::vector
валидность итераторов, не производительность. Если во время вставки или стирания у вас есть другие итераторы в контейнере, вам, вероятно, понадобится std::list
, поскольку вставка не делает недействительными никакие итераторы, а стирание только делает недействительными итераторы стираемому элементу. О единственный раз std::list
выиграет на представлении когда экземпляр и назначение весьма дороги, и в в таких случаях часто лучше изменить содержащийся класс, чтобы снизить стоимость копирования и назначения, а не переключаться на std::list
.