Разница между показателями list и forward_list? - PullRequest
0 голосов
/ 25 августа 2018

Как и в случае с ++ 11, у нас есть два типа списка:

std::list<int> lst = { 1, 2, 3, 4, 5 };

std::forward_list<int> flst = { 5, 4, 3, 2, 1};

Поскольку мы знаем, что список основан на двусвязном списке, а forward_list основан на односвязном списке.

Как мы должны решить, какой из них использовать? Есть ли какой-либо выигрыш в производительности любого из списка выше других?

1 Ответ

0 голосов
/ 25 августа 2018

Как решить, какой из них использовать?

Решите, нужна ли вам двунаправленная итерация.Если прямая итерация достаточно хороша, используйте std::forward_list, если только вам не требуется поддержка версий C ++, более старых, чем C ++ 11, которые могут иметь только std::list.

Есть ли какое-либо преимущество в производительности любогоиз списка выше других?

std::forward_list устраняет указатель на узел (со всеми сопутствующими преимуществами для кэша данных и подсистемы памяти), в то время как std::list обеспечивает уменьшение итератора в постоянном времени.

Но на практике ни один из этих контейнеров не используется так широко, как можно было бы поверить при посещении школы информатики.Реальная производительность std::vector превосходна для многих приложений, и ее использование памяти всегда меньше.Более требовательным приложениям, требующим списки, было бы полезно рассмотреть навязчивые списки, которые стандарт C ++ не предоставляет.

...