La classe vector de la bibliothèque STL <vector>

23 Nov 2021 23 Nov 2021 5316 vues ESSADDOUKI Mostafa 5 min de lecture
Introduction et syntaxe de base
1 Introduction au langage C++ 2 Entrée-sortie en C++ - cin et cout 3 Inférence de type avec le mot-clé auto en C++ 4 Classe std::string et les chaînes de caractères en C++ 5 Les structures conditionnelles (if et switch) en C++ (C++17 et C++20) 6 Les boucles en C++ (C++17 et C++20) 7 La gestion des fichiers en C++
Pointeurs et fonctions
8 Introduction aux pointeurs en C++ - Déclaration et interêts 9 Les références en C++ - déclaration et interêts 10 Les tableaux en C++ - Déclaration et interêts 11 Introduction aux fonctions en C++ 12 Passer des arguments à une fonction en C++ 13 Déclarer un paramètre const en C++ 14 Les fonctions Lambda en C++ 15 Fonctions utiles (Mathématiques et caractères) en C++
Programmation OO
16 Classes et objets en C++ 17 Spécificateurs d'accès en C++ 18 Constructeurs et destructeur d'une classe en C++ 19 Fonctions membres en C++ 20 Membres statiques d'une classe en C++ 21 Fonctions en ligne en C++ - inline 22 Fonctions et classes amies en C++ - friend 23 Surcharge des fonctions en C++ 24 Surcharge des opérateurs en C++ 25 Héritage en C++ 26 La gestion d'exceptions en C++ : déclaration, utilisation et personnalisation 27 fonctions et classes templates en C++ 28 Les nouveautés C++20 pour améliorer les templates en C++
Structures de données
29 Introduction aux structures de données 30 Les structures en C++ et la différence avec les structures en C 31 Les listes chaînées en C++ 32 Les piles en C++ 33 File d'attente en C++ 34 Arbre binaire de recherche : définition et mise en oeuvre en C++
La bibliothèque standard (STL)
35 Introduction à la bibliothèque de Template Standard STL 36 Les itérateurs en C++ - définition, déclaration et exemples 37 La classe array en C++ (bibliothèque STL) <array> 38 La classe vector de la bibliothèque STL <vector> 39 La classe deque en C++ ( Bibliothèque STL) 40 La classe list en C++ (bibliothèque STL) <list> 41 La classe stack (Pile) en C++ (bibliothèque STL) <stack> 42 La classe queue (File d'attente) en C++ (bibliothèque STL) <queue> 43 La file d'attente prioritaire (classe priority_queue) - Bibliothèque STL 44 Les ensembles en C++ (Classe set <set> - Bibliothèque STL) 45 Les dictionnaires en C++ : Classe map (Bibliothèque STL) 46 Introduction aux algorithmes de la bibliothèque STL (programmation compétitive) 47 Tri et méthodes associées en C++ - Bibliothèque STL 48 Recherche dichotomique et méthodes associées en C++ - Bibliothèque STL 49 Appliquer un prédicat ou une fonction aux éléments d'une séquence en C++ - Bibliothèque STL 50 Recherche dans une séquence et méthodes associées en C++ - Bibliothèque STL

Le conteneur vector en C++

Définition La classe vector est un conteneur de la bibliothèque STL défini dans l’en-tête <vector>. Elle représente une séquence dynamique d’éléments de même type stockés en mémoire contiguë et accessibles par indice.

Un vector fournit :

  • un accès aléatoire rapide aux éléments (comme un tableau),
  • une insertion et une suppression efficaces à la fin du conteneur,
  • un redimensionnement automatique lorsque de nouveaux éléments sont ajoutés.
Conseil Utilisez vector lorsque vous avez besoin d’un tableau dynamique dont la taille peut changer pendant l’exécution du programme.

Un vecteur peut être vu comme une séquence d’éléments avec une extrémité ouverte où les nouveaux éléments peuvent être ajoutés facilement.

En interne, un vecteur est implémenté comme un tableau dynamique alloué sur le tas. Lorsqu’un vecteur devient plein, un nouveau tableau plus grand est alloué et les éléments existants sont copiés vers ce nouveau tableau.

Attention L’insertion au début ou au milieu d’un vecteur peut être coûteuse car tous les éléments suivants doivent être déplacés en mémoire.

Constructeurs et opérateur d’affectation

La classe vector possède plusieurs constructeurs permettant de créer et initialiser un vecteur.

   
Syntaxe C++
vector<T> vec;                 // vecteur vide
vector<T> vec(n);              // vecteur de n éléments
vector<T> vec(n, valeur);      // n éléments initialisés avec valeur
vector<T> vec(debut, fin);     // vecteur construit à partir d'une plage
vector<T> vec(autreVector);    // constructeur de copie
vector<T> vec = autreVector;   // opérateur d’affectation
Remarque La notation [debut, fin) signifie que l’élément debut est inclus dans la copie mais pas l’élément fin.

Taille et capacité

Les vecteurs disposent de plusieurs fonctions membres permettant de gérer leur taille et leur capacité mémoire.

   
Fonctions utiles C++
vec.size();        // nombre d’éléments
vec.max_size();    // taille maximale possible
vec.resize(n);     // redimensionner le vecteur
vec.empty();       // true si le vecteur est vide
vec.capacity();    // capacité mémoire actuelle
vec.reserve(n);    // réserver de la mémoire
FonctionDescription
size()Renvoie le nombre d’éléments présents dans le vecteur.
capacity()Renvoie la capacité mémoire actuellement allouée.
resize(n)Change la taille du vecteur à n éléments.
reserve(n)Alloue de la mémoire pour au moins n éléments.

Accéder aux éléments

Les éléments d’un vecteur peuvent être accédés de différentes manières.

   
Accès aux éléments C++
vec.front();    // premier élément
vec.back();     // dernier élément
vec[i];         // accès direct par indice
vec.at(i);      // accès sécurisé avec vérification
Bonne pratique Utilisez vec.at(i) lorsque vous voulez vérifier que l’indice est valide. Si l’indice est hors limites, une exception sera levée.

Insertion d’éléments

Les vecteurs permettent d’ajouter des éléments de différentes manières.

   
Insertion C++
vec.push_back(valeur);           // ajouter à la fin
vec.insert(pos, valeur);         // insérer avant pos
vec.insert(pos, n, valeur);      // insérer n copies
vec.insert(pos, premier, dernier); // insérer une plage
Complexité L’insertion à la fin est en général O(1), mais l’insertion au milieu est en O(n).

Suppression d’éléments

   
Suppression C++
vec.pop_back();          // supprimer le dernier élément
vec.erase(pos);          // supprimer un élément
vec.erase(debut, fin);   // supprimer une plage
vec.clear();             // supprimer tout le vecteur

Exemple complet d'utilisation


#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main(){

vector<string> etd;

etd.push_back("Mostafa");
etd.push_back("Omar");
etd.push_back("Sara");
etd.push_back("Mohamed");
etd.push_back("Moneim");

cout<<"Taille : "<

Sortie
Taille : 5
Capacite : 8
Liste des etudiants :
Mostafa Omar Dounia Sara Mohamed Moneim
Apres suppression :
Mostafa Omar Dounia Sara Mohamed

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.