Outils d'utilisateurs

Outils du Site


c_1y_-_les_tableaux

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

c_1y_-_les_tableaux [2015/02/03 00:27]
jo_link_noir auto t1 = {0, 1, 2, 3} crée un std::initializer_list
c_1y_-_les_tableaux [2020/10/25 03:52] (Version actuelle)
issam Correction nom de variable
Ligne 20: Ligne 20:
  
 <code cpp> <code cpp>
-int t2[] = {0, 1, 2, 3}; // tableau de 4 entiers+int t1[] = {0, 1, 2, 3}; // tableau de 4 entiers
 auto s = "un chaine"; // tableau de caractères constants (const char) auto s = "un chaine"; // tableau de caractères constants (const char)
 </code> </code>
Ligne 38: Ligne 38:
 <code cpp> <code cpp>
 std::array<int, 4> a1 = {0, 1, 2, 3}; // tableau d'entier std::array<int, 4> a1 = {0, 1, 2, 3}; // tableau d'entier
-std::find(begin(a1), end(t1), 2); // itérateurs+std::find(begin(a1), end(a1), 2); // itérateurs
 </code> </code>
  
Ligne 163: Ligne 163:
 </code> </code>
  
-Un point important à noter lors de l'utilisation de ce type de tableau. Ces tableaux sont alloués sur la pile, qui a une taille limitée (différente selon le système et les options de compilation). Lorsque l'on souhaite créer des tableaux de taille importante, il faut utiliser des tableaux dynamiques std::vector. Lors de la création d'un tableau de taille fixée à l’exécution, si l'allocation échoue à cause d'un manque de mémoire disponible, le comportement est indéterminé (undefined behavior). En pratique, cela signifie que le comportement est laissé à l'appréciation des concepteurs de compilateurs (et donc potentiellement non reproductible selon le compilateur), bien qu'il est encouragé à lancer une exception de type std::bad_array_length (nouveau type d'exception également ajoutée dans ce TS). La seule garantie est que la mémoire sera libérée correctement (local object with automatic storage duration). Remarque : pour le constructeur des conteneurs avec un initializer-list, il est possible de ne pas mettre le signe égal. Il faut faire attention dans ce cas à ne pas confondre les deux syntaxes, avec parenthèses et avec crochets, qui sont visuellement proches, mais ont des comportements totalement différents :+Lors de la création d'un tableau de taille fixée à l’exécution, si l'allocation échoue à cause d'un manque de mémoire disponible, le comportement est indéterminé (undefined behavior). En pratique, cela signifie que le comportement est laissé à l'appréciation des concepteurs de compilateurs (et donc potentiellement non reproductible selon le compilateur), bien qu'il est encouragé à lancer une exception de type std::bad_array_length (nouveau type d'exception également ajoutée dans ce TS). La seule garantie est que la mémoire sera libérée correctement (local object with automatic storage duration). Remarque : pour le constructeur des conteneurs avec un initializer-list, il est possible de ne pas mettre le signe égal. Il faut faire attention dans ce cas à ne pas confondre les deux syntaxes, avec parenthèses et avec crochets, qui sont visuellement proches, mais ont des comportements totalement différents :
  
 <code cpp> <code cpp>
Ligne 293: Ligne 293:
  
 ===== Les tableaux multidimensionnels ===== ===== Les tableaux multidimensionnels =====
 +
 +**EDIT Mai 2018 : les propositions pour les vues sur les tableaux ont été largement modifiées depuis la publication de cet article. Vous pouvez consulter les propositions suivantes :**
 +
 +  * [[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0009r5.html|P0009r5 : Polymorphic Multidimensional Array Reference]]
 +  * [[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0122r6.pdf|P0122r6 : span: bounds-safe views for sequences of objects]]
 +
 +
  
 La manipulation de tableaux multidimensionnels est un problème classique en C++. Il est possible d'utiliser des solutions génériques, comme Boost.MultiArray, ou domaine spécifique, comme les outils de manipulation des images (Boost.GIL), la géométrie (Boost.Geometry) ou des matrices (Boost.uBLAS). Le draft N3851 propose d'ajouter ce type de tableau dans le C++. La création de tableaux à plusieurs dimensions pose un certain nombre de problématique sur : La manipulation de tableaux multidimensionnels est un problème classique en C++. Il est possible d'utiliser des solutions génériques, comme Boost.MultiArray, ou domaine spécifique, comme les outils de manipulation des images (Boost.GIL), la géométrie (Boost.Geometry) ou des matrices (Boost.uBLAS). Le draft N3851 propose d'ajouter ce type de tableau dans le C++. La création de tableaux à plusieurs dimensions pose un certain nombre de problématique sur :
c_1y_-_les_tableaux.1422919651.txt.gz · Dernière modification: 2015/02/03 00:27 par jo_link_noir