Un conteneur séquentiel est un conteneur dans lequel les élements se suivent (tableaux, listes, …).
Un conteneur associatif est un conteneur dans lequel chaque élément est indexé par une clef (l’élément pouvant être la clef elle-même).
Les types passés en paramètre de template doivent parfois respecter des contraintes pour compiler (ces contraintes sont spécifiées dans la documentation).
Librairie standard
Tableau de taille dynamique : vector
Tableau de taille fixe : array
Listes chaînées : list ou forward_list
Ensembles : set ou unordered_set
Dictionnaires : map ou unordered_map
Pratique
On peut passer les chaînes de caractères constantes par std::string_view plutôt que const std::string& ou const char*.
Si une classe définit une constructeur acceptant un paramètre de type initializer_list, alors il faut forcément utiliser la syntaxe (...) plutôt que { ... } pour appeler un autre constructeur.
On peut écrire values[idx] si values est un tableau primitif ou si la classe de values définit un operator[].
Méthodologie
Pour savoir comment utiliser une classe ou fonction, commencer par regarder l’exemple fourni dans la doc.
Ce qu’il faut savoir faire
Langage
Définir un opérateur de comparaison : bool operator<(const ClassName& other) { return /* ... */; }
Utiliser les fonctions génériques permettant d’accéder ou de manipuler un conteneur : size, empty, clear, emplace_back, insert, erase, etc.
Instancier des conteneurs de la librairie standard et les utiliser (en consultant la doc si besoin).
Instancier des pair et des tuple.
Accéder au n-ième élément d’un tuple : auto& fifth = std::get<4>(my_tuple);
Méthodologie
Rechercher dans la documentation comment utiliser une fonction ou une classe (header à inclure, paramètres, contraintes, etc).
Utiliser la documentation pour choisir la meilleure classe à utiliser dans une situation donnée (complexité des opérations, espace utilisé, condition d’invalidation des itérateurs, etc).
Identifier les “vraies” erreurs dans la sortie du compilateur pour les corriger.
Ce dont il faut à peu près se souvenir
Théorie
Un foncteur est un objet qui définit un operator().
Librairie standard
Il faut spécialiser la classe std::hash pour Key si on souhaite utiliser Key comme clef d’un unordered_set ou unordered_map.