Outils pour utilisateurs

Outils du site


lang:cpp:container

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
lang:cpp:container [2023/02/27 14:26] – Ajout de "Héritage" rootlang:cpp:container [2025/03/11 11:07] (Version actuelle) – Ajout de "Template" root
Ligne 1: Ligne 1:
-====Spécificités==== +=====Spécificités===== 
-===Différence entre les conteneurs===+====Différence entre les conteneurs====
 ^Conteneur       ^ Mémoire contiguë  ^ ^Conteneur       ^ Mémoire contiguë  ^
 | vector         | Oui               | | vector         | Oui               |
Ligne 13: Ligne 13:
 [[https://embeddedartistry.com/blog/2017/09/11/choosing-the-right-container-sequential-containers/|Choosing the Right Container: Sequential Containers]] {{ :lang:cpp:container:choosing_the_right_container_sequential_containers_embedded_artistry_2019-11-13_11_44_12_.html |Archive du 09/09/2019 le 13/11/2019}} [[https://embeddedartistry.com/blog/2017/09/11/choosing-the-right-container-sequential-containers/|Choosing the Right Container: Sequential Containers]] {{ :lang:cpp:container:choosing_the_right_container_sequential_containers_embedded_artistry_2019-11-13_11_44_12_.html |Archive du 09/09/2019 le 13/11/2019}}
  
-===std::set===+====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. 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.
  
 [[https://stackoverflow.com/questions/2217878/c-stdset-update-is-tedious-i-cant-change-an-element-in-place|C++ std::set update is tedious: I can't change an element in place]] {{ :lang:cpp:container:stl_-_c_std_set_update_is_tedious_i_can_t_change_an_element_in_place_-_stack_overflow_2020-01-02_07_50_36_.html |Archive du 07/02/2010 le 02/01/2020}} [[https://stackoverflow.com/questions/2217878/c-stdset-update-is-tedious-i-cant-change-an-element-in-place|C++ std::set update is tedious: I can't change an element in place]] {{ :lang:cpp:container:stl_-_c_std_set_update_is_tedious_i_can_t_change_an_element_in_place_-_stack_overflow_2020-01-02_07_50_36_.html |Archive du 07/02/2010 le 02/01/2020}}
  
-===set::vector===+====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>'' 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==== +=====Autres implémentations===== 
-===std::array===+ 
 +Map et set : https://github.com/martinus/unordered_dense. Tout est stocké dans un ''std::vector''
 + 
 +=====Manipulation des données===== 
 +====std::array====
   * ''std::array'' to ''std::string''   * ''std::array'' to ''std::string''
 <code cpp> <code cpp>
Ligne 36: Ligne 40:
 </code> </code>
  
-====Interopérabilité==== +=====Interopérabilité===== 
-===Comparaison de containers===+====Comparaison de containers====
 <code cpp> <code cpp>
 #include <utility> #include <utility>
Ligne 47: Ligne 51:
 </code> </code>
  
-====Spécificités==== +====Template==== 
-===std::vector===+ 
 +  * D'un container valeur 
 + 
 +<code cpp> 
 +template <template <typename, typename...> class Container, typename T, typename... Args> 
 +void function(const Container<T, Args...>& container); 
 +</code> 
 + 
 +  * D'un container clé / valeur 
 + 
 +<code cpp> 
 +template <template <typename, typename, typename...> class Map, typename Key, typename Value, typename... Args> 
 +void function(const Map<Key, Value, Args...>& container); 
 +</code> 
 + 
 +Attention, dans ''Args'', il y a ''std::allocator<std::pair<const Key, Value>>''. Donc, il n'est pas possible de définir une map en inversant simplement les clés / valeurs. 
 +=====Spécificités===== 
 +====std::vector====
  
   * Constructeur taille / valeur   * Constructeur taille / valeur
Ligne 58: Ligne 79:
 [[https://stackoverflow.com/questions/53541937/allocate-vector-size-with-list-initialization-curly-braces|Allocate vector size with list initialization (curly braces)]] {{ :lang:cpp:container:c_-_allocate_vector_size_with_list_initialization_curly_braces_-_stack_overflow_23_12_2022_09_55_33_.html |Archive du 29/11/2018 le 23/12/2022}} [[https://stackoverflow.com/questions/53541937/allocate-vector-size-with-list-initialization-curly-braces|Allocate vector size with list initialization (curly braces)]] {{ :lang:cpp:container:c_-_allocate_vector_size_with_list_initialization_curly_braces_-_stack_overflow_23_12_2022_09_55_33_.html |Archive du 29/11/2018 le 23/12/2022}}
  
-===Héritage===+====Héritage====
  
 Il n'est pas possible de faire un conteneur pour une classe de base. Il faut alors stocker uniquement le pointeur (intelligent ou brut). Il n'est pas possible de faire un conteneur pour une classe de base. Il faut alors stocker uniquement le pointeur (intelligent ou brut).
lang/cpp/container.1677504377.txt.gz · Dernière modification : 2023/02/27 14:26 de root