web-dev-qa-db-fra.com

Existe-t-il une bibliothèque prédéfinie de liste chaînée en C++?

Existe-t-il une liste chaînée en C++ que je pourrais simplement inclure? Ou dois-je créer le mien si je veux en utiliser un?

22
user69514

Comme daniel notes , oui, std::list . L'utilisation serait:

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

Etc.

Vous pouvez trouver une liste complète des classes STL ici . La section que vous recherchez est la 3.2, Classes de conteneur. Une autre référence utile de la bibliothèque standard C++ est ici .

38
GManNickG
#include <list>
11
Idan K

En c ++, nous avons la librairie standard STL, qui contient de nombreuses implémentations de structures de données et d’algorithmes populaires tels que piles, files d’attente, listes chaînées et algorithmes populaires de recherche et de tri .....

Comme Daniel l'a déjà dit, vous pouvez l'inclure en ajoutant #include <liste>

5
manugupt1
4
Traveling Tech Guy

Afin de compléter la connaissance des "listes de liens communes existantes", la bibliothèque Qt définit sa propre QLinkedList dans le cadre de ses classes de conteneur (QMap, QString, etc.).

Ils supportent les deux itérateurs standard, ainsi que/ Itérateurs de style Java , qui ont une syntaxe facile à utiliser:

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

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

Mise à jour: J'ai posté cette réponse pour la première fois en 2009, afin d'attirer l'attention sur la classe Qt. Dans le monde post-C++ 11, avec des choses comme for basé sur une plage, vous pouvez généralement obtenir une syntaxe encore meilleure que celle des itérateurs de style Java ... sans pour autant sacrifier les performances.

Donc, même si cela valait probablement la peine d'être signalé pour être complet lorsque j'ai posté, aujourd'hui, je ne serais pas susceptible de le mentionner. À moins que vous n'ayez une raison étrange de ne pas le faire, utilisez simplement la liste à liaison unique ( std::forward_list ) ou la liste à double liaison ( std::list ) de la bibliothèque standard.

3
HostileFork

Je sais que cette question est assez ancienne. De toute façon, il vaut peut-être la peine de la mettre à jour, car elle apparaît dans les résultats de recherche lorsque vous recherchez STD et des listes chaînées: 

En plus de ce qui a déjà été dit par les autres (utilisez std :: list pour une liste à double liaison), pour le cas d'utilisation le plus courant d'une liste à lien unique, std :: forward_list devrait être préféré, car il est optimisé pour les listes à lien unique spécifiquement.

0
D.F