Существует ли предопределенная библиотека связанного списка в C ++? - PullRequest
22 голосов
/ 14 ноября 2009

Есть ли в C ++ связанный список, который я мог бы просто #include? Или мне нужно создать свою собственную, если я хочу ее использовать?

Ответы [ 6 ]

39 голосов
/ 14 ноября 2009

Как Даниил отмечает , да, std::list. Использование будет:

#include <list>
// ...
std::list<int> listOfInts;
listOfInts.push_back(1);
// ...

и т. Д.

Полный список классов STL можно найти здесь . Раздел, который вы ищете - 3.2, Контейнерные классы. Еще одна полезная ссылка на стандартную библиотеку C ++: здесь .

12 голосов
/ 14 ноября 2009
#include <list>
5 голосов
/ 14 ноября 2009

В c ++ у нас есть STL, стандартные библиотеки шаблонов, которые содержат множество реализаций популярных структур данных и алгоритмов, таких как стеки, очереди, связанные списки и даже популярные алгоритмы поиска и сортировки .... .

Как уже сказал Даниэль, вы можете включить его с помощью #include

4 голосов
/ 14 ноября 2009
3 голосов
/ 15 ноября 2009

Для полноты понимания "общих списков ссылок, которые существуют", библиотека Qt определяет свой собственный QLinkedList как часть своих контейнерных классов (QMap, QString и т. Д.)

Они поддерживают как стандартные итераторы, так и Итераторы в стиле Java , которые имеют простой в использовании синтаксис:

QLinkedList<QString> list;
list << "A" << "B" << "C" << "D";

QListIterator<QString> i(list);
while (i.hasNext())
    qDebug() << i.next();

Обновление: Я опубликовал этот ответ в 2009 году, чтобы привлечь внимание к классу Qt. В мире после C ++ 11 с такими вещами, как на основе диапазона for, вы обычно можете получить даже лучший синтаксис, чем итераторы в стиле Java ... без ущерба для производительности для этого.

Так что, хотя я, вероятно, стоил упомянуть о полноте, когда я писал, сегодня я вряд ли упомяну это. Если у вас нет какой-то странной причины не делать этого, просто используйте односвязный список стандартной библиотеки (std::forward_list) или двусвязный список (std::list).

0 голосов
/ 16 декабря 2018

Я знаю, что этот вопрос довольно старый, в любом случае, возможно, его стоит обновить, так как он часто встречается при поиске при поиске STD и связанных списков:

В дополнение к тому, что уже было сказано другими (используйте std :: list для списка с двойной связью), для наиболее распространенного варианта использования списка с одной ссылкой, std: : forward_list должен быть предпочтительным, потому что он оптимизирован специально для односвязных списков.

...