Déclarer un tableau de vecteurs dans C++ STL
- Utiliser la notation de tableau de style C pour déclarer un tableau de vecteurs en C++
-
Utilisez
std::vector
pour déclarer un tableau de vecteurs en C++
Cet article présente plusieurs méthodes expliquant comment déclarer un tableau de vecteurs en C++.
Utiliser la notation de tableau de style C pour déclarer un tableau de vecteurs en C++
Un tableau fixe de vecteurs peut être déclaré par la notation entre crochets de tableau de style C - []
. Cette méthode définit essentiellement un tableau à deux dimensions avec un nombre fixe de lignes et un nombre variable de colonnes. Les colonnes peuvent être ajoutées avec l’appel de la fonction push_back
et les éléments accessibles par la notation arr[x][y]
si nécessaire. Dans l’exemple suivant, nous transmettons dix valeurs entières aléatoires à chaque colonne du tableau, ce qui donne une matrice dix par dix.
#include <iomanip>
#include <iostream>
#include <vector>
using std::array;
using std::cout;
using std::endl;
using std::setw;
using std::vector;
int main() {
vector<int> arr_vectors[10];
for (auto &vec : arr_vectors) {
for (int i = 0; i < 10; ++i) {
vec.push_back(rand() % 100);
}
}
for (auto &item : arr_vectors) {
for (auto &i : item) {
cout << setw(3) << i << "; ";
}
cout << endl;
}
return EXIT_SUCCESS;
}
Production:
83; 86; 77; 15; 93; 35; 86; 92; 49; 21;
62; 27; 90; 59; 63; 26; 40; 26; 72; 36;
11; 68; 67; 29; 82; 30; 62; 23; 67; 35;
29; 2; 22; 58; 69; 67; 93; 56; 11; 42;
29; 73; 21; 19; 84; 37; 98; 24; 15; 70;
13; 26; 91; 80; 56; 73; 62; 70; 96; 81;
5; 25; 84; 27; 36; 5; 46; 29; 13; 57;
24; 95; 82; 45; 14; 67; 34; 64; 43; 50;
87; 8; 76; 78; 88; 84; 3; 51; 54; 99;
32; 60; 76; 68; 39; 12; 26; 86; 94; 39;
Utilisez std::vector
pour déclarer un tableau de vecteurs en C++
Alternativement, on peut utiliser le conteneur std::vector
pour déclarer un tableau variable de vecteurs. L’extrait de code suivant illustre la déclaration et l’initialisation de la matrice quatre par quatre d’entiers. Notez que le deuxième argument du constructeur est un autre constructeur vectoriel
qui initialise ses éléments à des zéros. Les éléments de l’objet sont accessibles en utilisant la même notation arr[x][y]
. Du côté positif, la ligne et les colonnes peuvent être étendues dynamiquement en utilisant les fonctions intégrées du conteneur std::vector
.
#include <iomanip>
#include <iostream>
#include <vector>
using std::array;
using std::cout;
using std::endl;
using std::setw;
using std::vector;
constexpr int LENGTH = 4;
constexpr int WIDTH = 4;
int main() {
vector<vector<int>> vector_2d(LENGTH, vector<int>(WIDTH, 0));
vector_2d[2][2] = 12;
cout << vector_2d[2][2] << endl;
vector_2d.at(3).at(3) = 99;
cout << vector_2d[3][3] << endl;
cout << endl;
return EXIT_SUCCESS;
}
Production:
12
99
L’itération à travers le vecteur de vecteurs peut être effectuée en utilisant les boucles basées sur des plages
imbriquées à deux niveaux. Notez que le nom d’alias de l’élément d’accès est l’élément vectoriel dans la boucle interne for
.
#include <iomanip>
#include <iostream>
#include <vector>
using std::array;
using std::cout;
using std::endl;
using std::setw;
using std::vector;
constexpr int LENGTH = 4;
constexpr int WIDTH = 4;
int main() {
vector<vector<int>> vector_2d(LENGTH, vector<int>(WIDTH, 0));
std::srand(std::time(nullptr));
for (auto &item : vector_2d) {
for (auto &i : item) {
i = rand() % 100;
cout << setw(2) << i << "; ";
}
cout << endl;
}
cout << endl;
for (auto &item : vector_2d) {
for (auto &i : item) {
i *= 3;
}
}
for (auto &item : vector_2d) {
for (auto &i : item) {
cout << setw(3) << i << "; ";
}
cout << endl;
}
return EXIT_SUCCESS;
}
Production:
62; 85; 69; 73;
22; 55; 79; 89;
26; 89; 44; 66;
32; 40; 64; 32;
186; 255; 207; 219;
66; 165; 237; 267;
78; 267; 132; 198;
96; 120; 192; 96;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook