vectors stl
Rôle des vecteurs dans STL avec des exemples.
Jusqu'à présent, dans cette série C ++, nous avons vu des tableaux statiques qui ont une taille fixe.
Si au milieu du programme nous devons stocker plus d’éléments dans le tableau, cela devient alors impossible et nous sommes sûrs d’obtenir une exception «out_of_bound», au moment où nous essayons de stocker des éléments au-delà des limites du tableau.
Une solution pour cela est d'avoir le tableau déclaré avec la capacité maximale afin que nous ne trouvions aucun problème pour stocker plus d'éléments lors de l'exécution. Mais cet agencement a un sérieux inconvénient en ce sens que nous perdons trop de mémoire.
=> Consultez la série complète de formations C ++ ici.
La réponse à tous ces problèmes consiste à utiliser un tableau dynamique qui se développera de lui-même en fonction des besoins. STL fournit ce tableau dynamique sous la forme d'un conteneur vectoriel.
Ce que vous apprendrez:
- Comment définissons-nous les vecteurs?
- Déclaration d'un vecteur en C ++ avec la classe std :: Vector
- Initialiser le vecteur
- Itérateur vectoriel
- Fonctions vectorielles
- Capacité vectorielle
- Modificateurs vectoriels
- Vecteur 2D
- Exemple de vecteur
- Conclusion
- lecture recommandée
Comment définissons-nous les vecteurs?
Les vecteurs sont des conteneurs de tableaux dynamiques qui les redimensionnent automatiquement lorsque des éléments sont insérés ou supprimés. Le stockage du vecteur est géré par le conteneur de vecteur lui-même.
Les éléments du vecteur sont stockés dans des emplacements contigus. Tout comme les tableaux, les éléments vectoriels peuvent également être parcourus et accessibles à l'aide d'itérateurs.
Déclaration d'un vecteur en C ++ avec la classe std :: Vector
Dans la classe vectorielle STL ' std :: vecteur »Est défini sous l’en-tête. Ainsi, afin d'utiliser un conteneur vectoriel, nous devons inclure cet en-tête dans notre programme comme indiqué ci-dessous:
#include
Nous pouvons déclarer un vecteur vide comme indiqué ci-dessous:
std::vector myvec;
La ligne de code ci-dessus créera un vecteur avec les éléments de type entier. En mémoire, cela sera présenté comme myvec.
Initialiser le vecteur
On peut initialiser un vecteur avec une valeur au moment de le déclarer.
questions et réponses d'entretien de test manuel pour 3 ans d'expérience
Cela se fait comme suit:
#include int main() { std::vector myvec = {1, 1, 2, 3, 5}; }
Dans le code ci-dessus, nous déclarons un vecteur de type int nommé myvec contenant les cinq premiers éléments de la séquence de Fibonacci.
La disposition de la mémoire de ce vecteur sera comme ci-dessous:
Itérateur vectoriel
Comme déjà mentionné, nous utilisons des itérateurs pour parcourir le vecteur de manière séquentielle.
Les vecteurs prennent en charge les fonctions d'itérateur suivantes pour parcourir les éléments:
- commencer() - Renvoie l'itérateur pointé vers le premier élément du conteneur vectoriel.
- finir() - Renvoie un itérateur pointant vers l'élément qui suit le dernier élément du vecteur.
- rbegin () - Renvoie un itérateur inverse pointant vers le dernier élément du conteneur vectoriel.
- rend() – Renvoie un itérateur inverse pointant vers le premier élément du conteneur vectoriel.
- cbegin () - Renvoie un itérateur constant pointant vers le premier élément du conteneur vectoriel.
- quelques() - Renvoie un itérateur constant pointant vers l'élément suivant le dernier élément du conteneur vectoriel.
- crbegin () - Renvoie un itérateur de constante inverse pointant vers le dernier élément du conteneur vectoriel.
- crendre () - Renvoie un itérateur de constante inverse pointant vers le premier élément du conteneur vectoriel.
Voyons un exemple illustrant ces fonctions d’itération.Les autres fonctions peuvent être utilisées de la même manière.
#include #include using namespace std; int main() { vector v1; for (int i = 1; i <= 5; i++) v1.push_back(i+1); cout << 'Output of Vector with begin and end: '; for (auto i = v1.begin(); i != v1.end(); ++i) cout << *i << ' '; cout << '
Output of Vector with rbegin and rend: '; for (auto itr = v1.rbegin(); itr != v1.rend(); ++itr) cout << *itr << ' '; cout << '
Output Vector of with cbegin and cend: '; for (auto itc = v1.cbegin(); itc != v1.cend(); ++itc) cout << *itc << ' '; cout << '
Output Vector of with crbegin and crend : '; for (auto icr = v1.crbegin(); icr != v1.crend(); ++icr) cout << *icr << ' '; return 0; }
Production:
Sortie du vecteur avec début et fin: 2 3 4 5 6
Sortie de Vector avec rbegin et rend: 6 5 4 3 2
Vecteur de sortie de avec cbegin et cend: 2 3 4 5 6
Vecteur de sortie de avec crbegin et crend: 6 5 4 3 2
Ainsi dans ce code, nous déclarons un vecteur et y insérons des valeurs à l'aide de la fonction push_back. Ensuite, nous affichons les vecteurs en utilisant chacune des fonctions d'itérateur que nous avons décrites ci-dessus. Comme vous le voyez dans la sortie en fonction des fonctions d'itérateur utilisées, l'ordre dans lequel le vecteur est affiché change.
Fonctions vectorielles
Trier un vecteur
Nous pouvons utiliser des algorithmes STL que nous avons déjà vus sur le vecteur.
Ci-dessous, un exemple d’utilisation de «Trier» sur le vecteur.
#include #include #include using namespace std; int main() { vector myvec = {10,50,30,20,60,40}; cout<<'Original Vector'< Production:
Vecteur original
10 50 30 20 60 40
Vecteur trié
10 20 30 40 50 60
Dans l'exemple ci-dessus, nous avons initialisé un vecteur puis appliqué un algorithme de tri pour trier le vecteur.
Impression d'éléments d'un vecteur
Les vecteurs peuvent être imprimés en utilisant un itérateur et un flux «cout». Nous pouvons utiliser un itérateur pour parcourir chacun des éléments vectoriels et les imprimer avec cout.
L'exemple suivant montre ceci:
#include #include using namespace std; int main() { vector v1; for (int i = 1; i <= 5; i++) v1.push_back(i+2); cout << 'Output of Vector with begin and end: '; for (auto i = v1.begin(); i != v1.end(); ++i) cout << *i << ' '; }
Production:
Sortie du vecteur avec début et fin: 3 4 5 6 7
Capacité vectorielle
Il existe différentes fonctions qui agissent sur les vecteurs pour déterminer sa taille, sa taille maximale, etc.
Nous listons les fonctions comme ci-dessous:
(i) Taille du vecteur
La fonction size () renvoie le nombre d'éléments dans le conteneur vectoriel. Ceci est la fonction intégrée de la classe std :: vector et peut être utilisée directement pour trouver la taille du vecteur.
meilleur logiciel pour surveiller la température du processeur
Voyons un exemple de vecteur utilisant la fonction size ():
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << 'Vector Size : ' << myvec.size(); return 0; }
Production:
Taille du vecteur: 6
Dans le programme ci-dessus, nous avons défini un vecteur myvec composé de six éléments. Ensuite, nous appelons la fonction size () sur myvec et elle affiche la taille correcte.
(ii) Redimensionner un vecteur
Nous pouvons également redimensionner un vecteur à la taille souhaitée afin qu'il puisse contenir un nombre «n» d'éléments. Ceci est réalisé par la fonction ‘resize ()’ de la classe std :: vector. La fonction de redimensionnement prend la taille du vecteur comme paramètre, puis redimensionne le conteneur de vecteurs à la taille spécifiée.
Comprenons cela à l'aide d'un exemple.
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << '
Vector elements are: '; for (auto it = myvec.begin(); it != myvec.end(); it++) cout << *it << ' '; myvec.resize(4); cout << '
Vector Size after resize: ' << myvec.size(); cout << '
Vector elements after resizing are: '; for (auto it = myvec.begin(); it != myvec.end(); it++) cout << *it << ' '; return 0; }
Production:
Les éléments vectoriels sont: 1 1 2 3 5 8
Taille du vecteur après redimensionnement: 4
Les éléments vectoriels après redimensionnement sont: 1 1 2 3
Dans le programme ci-dessus, nous définissons d'abord un vecteur myvec de taille 6. Ensuite, nous appelons la fonction de redimensionnement sur ce vecteur avec size = 4. Cela signifie que nous voulons redimensionner notre vecteur à la taille 4 maintenant.
Après avoir appelé la fonction de redimensionnement, nous imprimons à nouveau le vecteur. Nous voyons que lorsque nous redimensionnons le vecteur à la taille 4, les éléments restants sont supprimés et seuls les 4 éléments du vecteur sont affichés.
Outre les fonctions de taille et de redimensionnement, la classe vectorielle prend également en charge d'autres fonctions qui nous permettent de manipuler la capacité du vecteur. Elles sont:
- taille max(): Renvoie la taille maximale, c'est-à-dire le nombre maximal d'éléments que le vecteur peut contenir.
- capacité(): Renvoie la taille de l'espace de stockage actuellement alloué. Ceci est renvoyé en termes de nombre d'éléments.
- vider(): Vérifie si le conteneur est vide.
- shrink_to_fit (): Réduit la capacité vectorielle pour l'adapter à la taille et rejette tous les autres éléments.
- réserve(): Réserve la capacité vectorielle à contenir n éléments.
Modificateurs vectoriels
Les modificateurs sont des opérations ou des fonctions qui peuvent être utilisées pour modifier le contenu du conteneur vectoriel. Nous verrons quelques-unes des principales fonctions utilisées comme modificateurs.
Attribution de nouvelles valeurs au vecteur
L'une des fonctions de modificateurs fournies par std :: vector est la fonction assign. La fonction Assign attribue de nouvelles valeurs au vecteur en remplaçant les anciennes.
Ceci est démontré dans l'exemple suivant.
#include #include using namespace std; int main() { // Assign vector vector myvec; // assign value 10 5 times myvec.assign(5, 10); cout << 'The vector elements: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; }
Production:
Les éléments vectoriels: 10 10 10 10 10
Dans le code ci-dessus, nous déclarons un vecteur de type int. Ensuite, nous appelons à affecter une fonction avec les paramètres 5, 10. Cela signifie que nous avons l'intention d'attribuer l'élément 10 au vecteur 5 fois. Lorsque nous affichons le vecteur, nous voyons que le vecteur a 5 éléments, tous avec la valeur 5.
Effacer un vecteur
La fonction suivante fournie par std :: vector pour modifier un vecteur est la fonction «effacer». La fonction Erase supprime les éléments de la plage spécifiée ou une position du vecteur.
Voyons un exemple de la fonction Erase.
#include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5}; cout << '
Vector elements:'; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // remove the first element myvec.erase(myvec.begin()); cout<<'
Vector size after erase: '< Production:
Éléments vectoriels: 1 1 2 3 5
Taille du vecteur après effacement: 4
Vecteur après l'opération d'effacement: 1 2 3 5
Comme indiqué dans la sortie ci-dessus pour la fonction de redimensionnement, nous spécifions la plage ou la position de l'élément à effacer ou à supprimer. Dans l'exemple ci-dessus, nous avons spécifié la position pointant vers le premier élément du vecteur.
Insérer des éléments dans le vecteur
La classe de vecteur std :: vector fournit encore une autre fonction pour insérer des valeurs dans le vecteur. La fonction d'insertion nous permet d'insérer des éléments dans le vecteur avant la position spécifiée.
Cela sera clair avec l'exemple suivant.
#include #include using namespace std; int main() { // Assign vector vector myvec = {2,3,4}; cout << '
Initial vector: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // inserts 20 at the beginning, 30 after that myvec.insert(myvec.begin(), 20); myvec.insert(myvec.begin()+1,30); cout << '
New vector after insert: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; }
Production:
Vecteur initial: 2 3 4
Nouveau vecteur après insertion: 20 30 2 3 4
Le programme ci-dessus déclare un vecteur avec 3 éléments au départ. Ensuite, nous appelons la fonction d'insertion deux fois pour insérer les valeurs 20 et 30 respectivement aux première et deuxième positions du vecteur. Ensuite, nous affichons le vecteur modifié.
Échange de contenu vectoriel
La classe vector nous offre également la possibilité d'échanger ou d'échanger le contenu d'un vecteur avec celui d'un autre vecteur du même type et de la même taille. Ceci est réalisé par la fonction intégrée de vecteur «swap».
Considérez le morceau de code suivant.
#include #include using namespace std; int main() { // swap operation vector v1, v2; v1.push_back(1); v1.push_back(3); v2.push_back(5); v2.push_back(7); cout << '
Vector 1: '; for (int i = 0; i < v1.size(); i++) cout << v1(i) << ' '; cout << '
Vector 2: '; for (int i = 0; i < v2.size(); i++) cout << v2(i) << ' '; // Swaps v1 and v2 v1.swap(v2); cout << '
After Swap
Vector 1: '; for (int i = 0; i < v1.size(); i++) cout << v1(i) << ' '; cout << '
Vector 2: '; for (int i = 0; i < v2.size(); i++) cout << v2(i) << ' '; }
Production:
Vecteur 1: 1 3
Vecteur 2: 5 7
Après échange
Vecteur 1: 5 7
Vecteur 2: 1 3
Le code ci-dessus montre le contenu de deux vecteurs avant et après l'échange.
Effacer les valeurs dans le vecteur
Contrairement à la suppression d'un ou plusieurs éléments du vecteur en utilisant la fonction d'effacement, nous avons une autre fonction «Effacer» qui nous permet de supprimer tous les éléments dans le conteneur du vecteur.
Dans le programme ci-dessous, nous démontrons une fonction claire du conteneur vectoriel.
#include #include using namespace std; int main() { // swap operation vector v1; v1.push_back(1); v1.push_back(3); v1.push_back(5); v1.push_back(7); cout<<'
Size of vector v1: '< Production:
Taille du vecteur v1: 4
Vecteur 1: 1 3 5 7
Taille du vecteur v1 après appel à la fonction clear: 0
Ici, nous déclarons d'abord un vecteur, puis nous y insérons des éléments. Une fois que nous appelons la fonction clear (), nous voyons que tous les éléments du vecteur sont supprimés en même temps.
à (pos)
Cette fonction renvoie la référence à l’élément à la position «pos» dans le vecteur.
C'est l'une des fonctions utilisées pour accéder à l'élément vectoriel.
Un exemple est donné ci-dessous:
#include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Element at position 3 : '< Production:
Élément en position 3: 3
Comme indiqué dans l'exemple, la fonction «at» est utilisée pour accéder à l'élément dans le vecteur à la position spécifiée.
Devant
La fonction «front» renvoie la référence au premier élément du vecteur. C'est encore une autre fonction que nous utilisons pour accéder aux éléments du conteneur vectoriel.
L’exemple suivant montre l’utilisation de la fonction «avant».
#include #include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();it Production:
Vecteur d'entrée: 1 1 2 3 5 8
Élément à l'avant du vecteur: 1
Retour
Semblable à la fonction «front», la fonction back est utilisée pour accéder au dernier élément du conteneur vectoriel. La fonction «back» renvoie une référence au dernier élément du conteneur vectoriel.
L’exemple suivant montre l’utilisation de la fonction «retour».
#include #include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();it Production:
Vecteur d'entrée: 1 1 2 3 5 8
Élément à l'arrière du vecteur: 8
Trouver un élément dans le vecteur
La fonction «trouver» est utilisée pour trouver si un élément particulier (appelé clé) est présent ou non dans le vecteur. Cette fonction est censée être rapide et efficace. Une fois la valeur trouvée, la fonction retourne.
L'exemple suivant montre l'utilisation de la fonction de recherche.
#include #include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();itkey; if(find(myvec.begin(),myvec.end(),key)!= myvec.end()) cout<<'
Element found'; else cout<<'
Element not found'; }
Production:
Vecteur d'entrée: 1 1 2 3 5 8
Entrez la clé à rechercher: 0
Élément introuvable
Vecteur 2D
Le vecteur bidimensionnel est également appelé «vecteur de vecteur». Tout comme les tableaux à deux dimensions, les éléments de vecteurs à deux dimensions sont également disposés sous forme de matrice.
Un exemple de programme pour le vecteur 2D est donné ci-dessous.
#include #include // for 2D vector using namespace std; int main() { // Initializing 2D vector 'odd_vect' with vector odd_vect{ { 1, 3, 5 }, { 7, 9, 11 }, { 13,15,17 } }; // Displaying the 2D vector cout<<'2D vector : '; cout< Production:
Vecteur 2D:
1 3 5
7 9 11
13 15 17
bon téléchargeur de musique mp3 pour android
Dans l'exemple ci-dessus, notez la manière dont le vecteur 2D est défini. Il est défini comme un vecteur à l’intérieur d’un autre vecteur. Lors de l'affichage de ce vecteur 2D, nous utilisons la même approche que celle de l'affichage des tableaux 2D.
Exemple de vecteur
Vous trouverez ci-dessous un exemple de vecteur contenant la plupart des opérations vectorielles.
#include #include using namespace std; int main() { // Assign vector vector myvec; // assign value 10 5 times myvec.assign(5, 10); cout << 'The vector elements: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // push value 5 in myvec myvec.push_back(5); int n = myvec.size(); cout << '
The new vector after push_back:'; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // pop the element myvec.pop_back(); cout<<'
New vector after pop_back : '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // inserts 20 at the beginning myvec.insert(myvec.begin(), 20); cout << '
New vector after insert: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // remove the first element myvec.erase(myvec.begin()); cout<<'
Vector size after erase: '< Production:
Les éléments vectoriels: 10 10 10 10 10
Le nouveau vecteur après push_back: 10 10 10 10 10 5
Nouveau vecteur après pop_back: 10 10 10 10 10
Nouveau vecteur après insertion: 20 10 10 10 10 10
Taille du vecteur après effacement: 5
Après effacement du premier élément: 10 10 10 10 10
Voici la capture d'écran pour le même.

Dans l'exemple ci-dessus, nous déclarons un vecteur puis, en utilisant les fonctions assign et push_back, saisissons des éléments dans le vecteur. Ensuite, nous utilisons la fonction pop_back pour supprimer un élément de la fin du vecteur. Après cela, nous ajoutons à nouveau un élément au vecteur en utilisant l'élément d'insertion, puis nous effaçons l'élément en utilisant la fonction d'effacement.
Ceci est un exemple de bout en bout du conteneur vectoriel démontrant ses diverses fonctions.
Conclusion
Avec cela, nous sommes arrivés à la fin de ce tutoriel sur le vecteur.
Dans notre prochain didacticiel, nous découvrirons le conteneur «liste» de STL qui est similaire aux lignes de tableaux et de vecteurs.
=> Consultez le guide de formation Perfect C ++ ici.
lecture recommandée