Les vecteurs
Un tableau dynamique est donc un tableau dont la taille peut varier.
En C++, les vecteurs permettent de gérer les tableaux dynamiques.
Déclaration d'un tableau
En premier lieu il est nécessaire de déclarer la bibliothèque vector au début de programme.
#include <iostream>
#include <vector>
La syntaxe de déclaration d'un vecteur est :
vector <TYPE> nom(taille)
Ce qui donnerai par exemple dans un programme
int main()
{
vector<int> tableauEntier(3);//déclaration d'un tableau dynamique de 3 entiers
....
Remarque : En général on initialise le tableau avec quelques valeurs mais ce n'est pas indispensable :
vector<int> tableauEntier;//déclaration d'un tableau dynamique sans cases
Affecter des valeurs initiales
On peut initialiser les cellules en spécifiant la valeur entre parenthèse :
int main()
{
vector<int> tableauEntier(3,0);//tableau dynamique de 3 entiers initialement à 0
....
Accéder aux cellules
L'accès aux cellules d'un tableau dynamique se fait comme avec les tableaux statiques.
Exemple de programme qui affiche le contenu d'un tableau dynamique.
...
for (int i=0; i<monTableauD.size();i++)
cout<<monTableauD[i]<<endl;
Remarque : monTableauD.size() rend la taille du tableau.
Changer la taille d'un tableau dynamique
Nous avons vu précédemment, qu'à la déclaration du tableau dynamique (du vecteur) on peut spécifier le nombre de cases.
Ajouter
Pour rajouter une case, on pourra utiliser la fonction push_back :
monTableauD.push_back(25); rajoute une case au tableau contenant la valeur 25
Enlever
Pour rajouter une case, on pourra utiliser la fonction push_back :
monTableauD.pop_back(); enlève la dernère case du tableau
QT dispose d'une classe QVector qui permet de gérer des tableaux dynamiques de manière plus efficace que les vecteurs standards du C++.
Chaque tableau dynamique sera donc une instance de la classe QVector.
Comme pour le tableau statique, la première cellule du tableau porte le numéro 0.
Création du tableau :
Déclaration d'un tableau dynamique d'entiers :
QVector<int> monTableauD; //tableau dynamique d'entiers
Initialisation d'un tableau avec une valeur :
QVector<QString> monTableauD(200, "QT");// tableau de 200 chaînes initialisé avec la valeur "QT"
Affecter et accéder aux valeurs
On utilise un indice de tableau.
Par exemple :
if (monTD[0] == "")
monTD[0] = "QT";
Remarque : on peut utiliser aussi monTD.at(0) au lieu de monTD[0] qui est plus rapide.
Connaître la taille du tableau : size()
C'est une fonction très utile dans les boucles itératives utilisants des tableaux dynamiques :
...
for (int i=0; i<monTableauD.size();i++)
cout<<monTableauD.at(i)<<endl;
Insérer une valeur à la fin du tableau
QVector<QString> monTableauD(0);
monTableauD.append("nouvelle valeur");
Remarque : la fonction insert permet d'insérer une valeur à l'emplacement spécifié par i :
monTableauD.insert(i,valeur);
Remplir tout le tableau avec une valeur
monTableauD.fill("QT"): //remplit toutes les cases avec la chaîne QT
Trouver une occurence dans le tableau :
Est-ce que l'occurence existe ?
if (monTableauD.contains("motcherché")==true)
{
//traitement
};
Quelle est la suivante ?
int position=monTableauD.indexOf("motcherché");//on part de l'index courant jusqu'à la première case trouvée
Quelle est la précédente ?
int position=monTableauD.LastindexOf("motcherché");//on part de l'index courant jusqu'à la precédente case trouvée
Combien y-a-t'il d'occurences?
int nombre=monTableauD.count("motcherché");//on cherche combien de fois la valeur existe
Passage d'un tableau en paramètre
Contrairement à un tableau statique, un tableau dynamique peut-être passé en paramètre à une fonction.
La fonction ne modifie pas le tableau
....
void maFonction(QVector<QString> unTableauD)
{
//code de traitement
}
Attention : Avec ce code, le tableau transmis en paramètre ne peut être modifié par maFonction.
La fonction doit modifier le tableau
Dans ce cas il faut utiliser les pointeurs :
void maFonction(QVector<QString>* unTableauD)
{
for(int i = 0; i < unTableauD.size(); i++){
unTableauD[i] = "vide";
}
Et l'appel de la fonction utilise la référence au tableau. Le caractère & (esperluette) spécifie l'adresse du tableau:
maFonction(&monTableauD);
Pour plus de fonctions, il convient de consulter l'aide de la classe QVector