Synthèse
Ce qu’il faut retenir
Théorie
- 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 /* ... */; }
- Définir un opérateur d’égalité :
bool operator==(const ClassName& other) { return /* ... */; }
Librairie standard
- 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
.