C++ propose différents conteneurs pour stocker des éléments de même type de manière ordonnée.
Il y a std::array pour les conteneurs de taille fixe et std::vector, qui apporte des capacités de redimensionnement dynamique.
Quand on déclare un tableau ou un vecteur, il faut préciser le type des éléments que ce conteneur va stocker. Les tableaux ont aussi besoin d'une taille. Regarde ces exemples pour voir l'initialisation des deux types de conteneurs :
#include <array>
#include <string>
// std::array<element_type, size> variable_name {list of elements}
std::array<std::string, 3> indie_rock {"yeah", "yeah", "yeah"};
// indie_rock contains the elements "yeah" three times
Les vecteurs ont généralement besoin de plus d'espace, puisqu'ils allouent de la mémoire pour permettre une croissance ultérieure. On n'a pas besoin de préciser de taille :
#include <vector>
// std::vector<element_type> variable_name {list of elements}
std::vector<int> countdown {3, 2, 1};
// my_vector contains the elements 3, 2 and 1
Remarque : tu n'as pas besoin de connaître les mécanismes exacts qui se cachent derrière le concept de template pour l'instant, il aura son propre concept plus bas dans l'arbre du programme.
Les vecteurs et les tableaux partagent les mêmes fonctions pour accéder à leurs éléments.
On peut utiliser les fonctions membres front et back pour obtenir le premier et le dernier élément du conteneur.
Il y a aussi at et l'opérateur [] pour accéder à des éléments précis.
countdown[0];
// => 3
countdown.at(2);
// => 1
countdown[1] = 4;
// countdown now contains 3, 4 and 1
indie_rock.back() = "yeahs";
// indie_rock is now "yeah", "yeah", "yeahs"
Remarque : si tu choisis une position qui ne se trouve pas dans les limites de ton conteneur,
[]peut entraîner un comportement indéfini. La fonctionatlèverait une exception, ce qui pourrait te faciliter la vie à long terme.
Comme la taille d'un vector n'est pas fixe, il est possible d'ajouter ou de supprimer des éléments.
Deux fonctions courantes pour cela sont emplace_back et pop_back.
std::vector<std::string> witches {"Holly", "Alyssa", "Shannen"};
witches.pop_back();
// Shannen is no longer with the witches
witches.emplace_back("Rose");
// Rose has joined the team
On peut vérifier si un conteneur est vide avec la fonction membre empty.
Si on veut connaître le nombre d'éléments, on peut utiliser size.