Ceci est une ancienne révision du document !
Table des matières
Spécificités
Différence entre les conteneurs
| Conteneur | Mémoire contiguë |
|---|---|
| vector | Oui |
| array | Oui |
| deque | Non |
| list | Non |
| forward_list | Non |
| stack | Non |
| queue | Non |
| priority_queue | Dépend |
Choosing the Right Container: Sequential Containers Archive du 09/09/2019 le 13/11/2019
std::set
Les itérateurs begin et end renvoient un type const. std::set est ordonné et sa clé est stockée dans un arbre de type red-black.
C++ std::set update is tedious: I can't change an element in place Archive du 07/02/2010 le 02/01/2020
set::vector
Il y a un cas particulier pour std::vector<bool>. La mémoire est optimisée donc un octet peut stocker 8 bits. Ce qui fait que l'accès à la propriété data() est bloquée. Si cette optimisation n'est pas souhaitée, il faut utiliser un std::vector<unsigned char>.
Manipulation des données
std::array
std::arraytostd::string
std::string str(std::begin(arr), std::end(arr));
std::stringtostd::array
std::string toto("tototototototo1234"); std::array<char, 16> arr{}; std::copy_n(toto.begin(), std::min(toto.length(), static_cast<size_t>(16)), arr.data());
Interopérabilité
Comparaison de containers
#include <utility> std::vector<int> v1 = std::vector<int>{ 1, 2, 3, 4, 5 }; std::set<int> s2 = std::set<int>{ 2, 3, 4, 5, 6 }; bool v1smaller = std::lexicographical_compare(v1.begin(), v1.begin(), s2.begin(), s2.end());
Spécificités
std::vector
- Constructeur taille / valeur
Ne pas utiliser le constructeur avec {} si on souhaite utiliser celui (taille, valeur_par_defaut).
Ou sinon, il faut expliciter tout le constructeur sans passer par les valeurs par défaut : {15,0,std::allocator<int>()}. Ainsi, il comprendra qu'il faut utiliser le constructeur et non l'initialisation par liste.
Allocate vector size with list initialization (curly braces) Archive du 29/11/2018 le 23/12/2022
