Должен ли std :: list быть устаревшим?

По словам Бьярна Страуструпа слайды от его Going Native 2012 с основным докладом, вставка и удаление в std::list ужасно неэффективны на современном оборудовании:

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

Список векторных ударов массово для вставки и удаления

Если это действительно так, то какие варианты использования оставлены для std::list? Разве это не должно быть устаревшим тогда?

9

Решение

Вектор и список решают разные задачи. Список обеспечивает гарантию того, что итераторы никогда не станут недействительными при вставке и удалении других элементов. Вектор не дает такой гарантии.

Это не все о производительности. Так что ответ — нет. Список не должен быть устаревшим.

редактировать Кроме того, C ++ не предназначен для работы исключительно на «современном оборудовании». Предполагается, что он будет полезен для гораздо более широкого спектра оборудования, чем это. Я программист в финансовой индустрии и использую C ++, но другие области, такие как встраиваемые устройства, программируемые контроллеры, машины, работающие на сердце, и многие другие, так же важны. Язык C ++ не должен быть разработан исключительно с учетом потребностей определенных доменов и производительности определенных классов оборудования. Просто так я может не использовать список, не означает, что он не должен использоваться в языке.

22

Другие решения

Превосходит ли вектор список или нет, также зависит от типа элементов. Например, для int вектор элементов действительно очень быстрый, так как большая часть данных помещается в кэш-память ЦП, и для копирования данных можно использовать SIMD-инструкции. Таким образом, сложность вектора O (n) не оказывает большого влияния.

Но как насчет более крупных типов данных, где копирование не переводится в потоковую операцию, а вместо этого данные должны извлекаться повсюду? Кроме того, как насчет оборудования, которое не имеет больших кэшей ЦП и, возможно, также не содержит SIMD-инструкций? C ++ используется не только на современных компьютерах и рабочих станциях. Об устаревшем std :: list не может быть и речи.

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

8

Нет, и особенно не на основе одного конкретного графика. Есть случаи, когда список будет работать лучше, чем вектор. Увидеть: http://www.baptiste-wicht.com/2012/12/cpp-benchmark-vector-list-deque/

И это игнорирует разницу в производительности, как уже упоминали другие.

Суть Бьярне в этом разговоре заключалась не в том, что вы не должны использовать список. Это было то, что люди делают слишком много предположений о производительности списка, которые часто оказываются неверными. Он просто оправдывал позицию, согласно которой вектор должен всегда быть типом контейнера перехода по умолчанию, если только вы не обнаружите необходимость в производительности или других семантических характеристиках списков.

3

Конечно, нет. std :: list — это другая структура данных. Сравнение различной структуры данных является хорошим показателем ее свойств, преимуществ или недостатков. Но каждая структура данных имеет свои преимущества.

-1

Посмотрите на и то и другое ссылки ниже:

http://msdn.microsoft.com/en-us/library/802d66bt.aspx

http://msdn.microsoft.com/en-us/library/9xd04bzs.aspx

Сначала прочитайте первые строки, а затем посмотрите на следующие разделы: Параметры, Замечания и Члены — Конструкторы, Typedefs, Функции-члены и Операторы.

После чтение все, вы узнаете различия между списком и вектором и быть в состоянии сравнить их, и выяснить их профи а также минусыпреимущества а также недостатки.

Кто нуждается или любит профи а также преимущества из список больше, тогда он / она использует список вместо этого, и это причина, почему список должен не быть устаревшим.

Также кто-то перестанет использовать vector и начнет использовать list, если у него возникли проблемы с минусы а также недостатки вектора, что список не иметь.

Вы узнаете, какие функции-члены и операторы и то и другое список и вектор иметь общее, какие функции-члены и операторы вектор имеет только, и какие функции-члены и операторы список имеет только.

Я прочитал эти страницы MSDN в разделах функций-членов и операторов, и заметил, что только вектор класс поддерживает at функция-член и [] оператор, но только с другой стороны список класс поддерживает push_front а также pop_front функции-члены.

Вы узнаете ограничения, с которыми вам придется столкнуться при использовании только вектор, и ограничения, с которыми вам придется столкнуться при использовании только список. Если вы используете вектор, но это отсутствует что-то очень важно к тебе, но список не, тогда вы рассмотрите возможность использования списка вместо вектора, и наоборот (из списка в вектор).

Не существует чего-то совершенного. Ни за что этот вектор лучше, чем список в все. Если это правда, то список никогда не существовал в C ++ за всю историю.

Но есть список, существует, то должны быть некоторые точки, которые список лучше, чем вектор, если точно нет на графике вы показываете нам, затем в других вещах.

Может быть много лет назад программисты, которые использовали вектор только у них были трудности и проблемы, которые они должны были решить, и они получили решение, придумав класс списка и использовав его вместо вектора.

Я действительно не знаю, и, возможно, я ошибаюсь, но мне интересно, что класс списка был изобретен после что векторный класс был изобретен.

Я буду признателен вам, ребята, если вы скажете мне, правильно я или нет, и скажите мне истинный факт об этом.

Если вектор был не проблематично в некоторых моментах, тогда я не думаю, что этот список когда-либо был придуман.

Кстати об этом графике я упоминал, когда я увидел это в первый раз, прежде чем я прочитал что вы сказали об этом, я думал, что это показывает время, которое требуется для перебрать список и вектор. Я был удивлен, прочитав, что вы сказали, что это время вставки и удаления. Я думал, что вставить и удалить взять значительно меньше время итерации всей коллекции.

-3
По вопросам рекламы [email protected]