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

QVector

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