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