Initialiser les vecteurs 2D en C++

Muhammad Husnain 12 octobre 2023
  1. Vecteurs en C++
  2. Initialiser les vecteurs en C++
  3. Accéder aux valeurs d’un vecteur en C++
  4. Initialiser les vecteurs bidimensionnels en C++
Initialiser les vecteurs 2D en C++

Ce bref tutoriel de programmation concerne l’utilisation de vecteurs 2D en C++.

Avant de nous lancer dans les vecteurs 2D, nous verrons d’abord une introduction rapide aux vecteurs et à leur utilisation en C++. Ensuite, nous passerons aux vecteurs multidimensionnels et à leur utilisation.

Vecteurs en C++

Les vecteurs agissent exactement comme des tableaux dynamiques avec une fonctionnalité supplémentaire de se redimensionner automatiquement lors de l’insertion ou de la suppression d’un élément. Les vecteurs peuvent stocker des éléments homogènes (c’est-à-dire des éléments de types de données similaires).

Un vecteur peut redimensionner son conteneur ou son stockage automatiquement avec les ajouts et les suppressions.

Tous les membres d’un vecteur sont stockés en mémoire. Chaque élément suivant est adjacent au précédent afin qu’il soit facilement accessible via des itérateurs.

Lorsqu’un nouvel élément est ajouté, il est placé à la fin et prend un temps différent à chaque insertion car il vérifie d’abord si la mémoire est disponible ou non. Si la mémoire n’est pas disponible, il alloue d’abord de la nouvelle mémoire, puis insère l’élément dans le vecteur.

D’autre part, supprimer un élément du dernier prend un temps constant car il n’effectue pas de redimensionnement à chaque suppression.

Initialiser les vecteurs en C++

Nous avons des fichiers de bibliothèque vectorielle dans la bibliothèque de modèles standard C++ (STL). Par conséquent, pour utiliser des vecteurs, nous devons inclure le fichier d’en-tête requis, comme ceci :

#include <vector>

Pour déclarer un vecteur, la syntaxe suivante est suivie :

vector<int> v1;

Veuillez noter que nous n’avons pas besoin de spécifier la taille des vecteurs, car les vecteurs peuvent augmenter leur taille dynamiquement et automatiquement si nécessaire. Nous pouvons utiliser la liste d’initialisation ou l’initialisation uniforme pour initialiser le vecteur.

Ces deux méthodes sont illustrées dans l’exemple ci-dessous :

vector<int> vec1 = {21, 22, 23, 24, 25};  // initializer list method
vector<int> vec2{21, 22, 23, 24, 25};     // uniform initialization

Il existe une autre méthode pour initialiser un vecteur si nous voulons remplir tout le vecteur avec la même valeur. Ceci est illustré ci-dessous :

vector<int> vec3(4, 11);

Cela initialisera un vecteur de taille 4, et tous les éléments auront la valeur 11 comme ceci : {11,11,11,11}.

De plus, si nous n’entrons pas les données dans le vecteur au moment où nous avons déclaré le vecteur, nous pouvons les ajouter plus tard en utilisant la fonction push_back. La syntaxe de cette fonction est :

vec1.push_back(value);

Cela insérera la valeur comme dernier élément du vecteur.

Accéder aux valeurs d’un vecteur en C++

Il existe certaines méthodes d’itération dans les vecteurs.

Fonction Objectif
begin() Cette fonction renvoie un pointeur itérateur sur le premier élément du vecteur.
end() Cette fonction renvoie un pointeur itérateur sur le dernier élément du vecteur.
size() Cette fonction renvoie la taille totale du vecteur, ce qui signifie avoir combien d’éléments.
at(p) Cette fonction renvoie le pointeur sur l’élément à la position p dans le vecteur.
empty() Cette fonction vérifie si le vecteur est vide ou non.

Ces fonctions sont illustrées dans l’extrait de code suivant :

#include <iostream>
#include <vector>
using namespace std;

int main() {
  vector<int> vec1;
  for (int j = 1; j <= 5; j++) vec1.push_back(j + 1);
  cout << "Size: " << vec1.size() << endl;
  cout << "Output of begin and end functions: ";
  for (auto a = vec1.begin(); a != vec1.end(); ++a) cout << *a << " ";
  cout << endl;
  cout << "Element at position 3: " << vec1.at(3) << endl;
  return 0;
}

Production:

Size: 5
Output of begin and end functions: 2 3 4 5 6
Element at position 3: 5

Initialiser les vecteurs bidimensionnels en C++

Comme les tableaux 2D, les vecteurs 2D sont également un vecteur de vecteurs. Chaque élément d’un tel vecteur est un vecteur lui-même.

Comme dans les tableaux en escalier Java, nous pouvons avoir un vecteur de plusieurs tailles à chaque position d’un vecteur 2D. Cela se comporte comme une matrice ayant un certain nombre de lignes et de colonnes.

La différence est qu’il peut avoir un nombre variable de colonnes dans chaque ligne.

Syntaxe pour la déclaration :

vector<vector<int>> vec1{{1, 1, 0}, {0, 2}, {2, 1, 3}};

Comme il s’agit d’une structure 2D, nous avons besoin de deux boucles pour parcourir ce vecteur : une boucle pour parcourir les lignes et la boucle interne pour parcourir les colonnes.

for (int a = 0; a < vec1.size(); a++) {
  for (int b = 0; b < vec1[a].size(); b++) cout << v1[a][b] << " ";

Assurez-vous que la fonction size() ne renvoie pas le nombre total d’éléments dans le vecteur. Au lieu de cela, il renvoie le nombre total de vecteurs dans ce vecteur.

Nous pouvons également initialiser ce vecteur en spécifiant le nombre de lignes et de colonnes comme ceci :

int rows = 3;
int columns = 4;
vector<vector<int>> vec1(rows, vector<int>(columns));

Regardons le code complet pour créer des vecteurs 2D :

#include <iostream>
#include <vector>
using namespace std;

int main() {
  int rows = 3;
  int columns = 4;
  vector<vector<int>> vec(rows, vector<int>(columns));
  for (int a = 0; a < rows; a++)  // loop for initializing the vector
  {
    for (int b = 0; b < columns; b++) {
      vec[a][b] = a * b;
    }
    cout << endl;
  }
  for (int a = 0; a < rows; a++)  // loop for displaying the values of vector
  {
    for (int b = 0; b < columns; b++) {
      cout << vec[a][b] << " ";
    }
    cout << endl;
  }
  return 0;
}

Production:

0 0 0 0
0 1 2 3
0 2 4 6
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

Article connexe - C++ Vector