Tutoriel d'introduction au C++ || Comment utiliser le vecteur C++

Comment utiliser le vecteur C++

En C++, le vecteur est un conteneur très utile. Il peut stocker différents types d'objets comme un conteneur. En termes simples, le vecteur est un tableau dynamique qui peut stocker n'importe quel type, et peut augmenter et compresser les données.

Les tableaux en C++ sont délicats. Existe-t-il un type de données similaire à list en Python ? Le vecteur est similaire ! Un vecteur est une collection d'objets du même type, et chaque objet a une valeur d'indice entière correspondante. Comme pour les objets string, la bibliothèque standard se chargera de gérer la mémoire associée au stockage des éléments. Nous appelons un vecteur un conteneur car il peut contenir d'autres objets. Tous les objets d'un conteneur doivent être du même type.

1. Qu'est-ce qu'un vecteur ?

Un vecteur est un conteneur de séquence qui encapsule un tableau dimensionné dynamiquement. Comme tout autre type de conteneur, il peut stocker des objets de différents types. On peut simplement penser qu'un vecteur est un tableau dynamique qui peut stocker n'importe quel type.

2. Caractéristiques du conteneur

1. Séquence séquentielle

Les éléments d'un conteneur de séquence sont triés dans un ordre linéaire strict. L'élément correspondant est accessible par sa position dans la séquence.

2. Tableau dynamique

L'accès direct rapide à n'importe quel élément de la séquence est pris en charge, même via l'arithmétique de pointeur. Opérations permettant d'ajouter/supprimer relativement rapidement des éléments à la fin d'une séquence.

3. Conscient de l'allocateur qui peut percevoir l'allocateur de mémoire

Un conteneur utilise un objet d'allocation de mémoire pour gérer dynamiquement ses besoins de stockage.

3. Réalisation des fonctions de base

1. Constructeur

  • ​​​​ :vector() Créer un vecteur vide
  • ​​​​:vector(int nSize) Créer un vecteur avec le nombre d'éléments nSize
  • ​​​​:vector(int nSize,const t& t) Créez un vecteur, le nombre d'éléments est nSize et la valeur est t
  • ​​​​ :vector(const vector&) copier le constructeur
  • ​​​​ :vector(begin,end) Copiez les éléments d'un autre tableau dans l'intervalle [début, fin) dans le vecteur

2. Ajouter une fonction

  • ​​​​:void push_back(const T& x) Ajouter un élément X à la fin du vecteur
  • ​​​​:iterator insert(iterator it,const T& x) Augmenter un élément x avant que l'itérateur dans le vecteur ne pointe vers l'élément
  • ​​​​:iterator insert(iterator it,int n,const T& x) Augmenter n éléments identiques x avant que l'itérateur dans le vecteur pointe vers l'élément
  • ​​​​ :iterator insert(iterator it,const_iterator first,const_iterator last) insère les données entre [premier, dernier) d'un autre vecteur du même type avant que l'itérateur dans le vecteur ne pointe sur l'élément

3. Fonction de suppression

  • ​​​​ :iterator erase(iterator it) Supprimer l'élément pointé par l'itérateur dans le vecteur
  • ​​​​ :iterator erase(iterator first,iterator last) Supprimer les éléments dans [first, last) dans le vecteur
  • ​​​​ :void pop_back() Supprimer le dernier élément du vecteur
  • ​​​​ :void clear() efface tous les éléments du vecteur

4. Fonction de traversée

  • ​​​​ :reference at(int pos) Renvoie une référence à l'élément à la position pos
  • ​​​​ :reference front() Renvoie une référence au premier élément
  • ​​​​ :reference back() renvoie une référence à l'élément de queue
  • ​​​​:iterator begin() Renvoie le pointeur de tête de vecteur, pointant vers le premier élément
  • ​​​​:iterator end() Renvoie le pointeur de queue de vecteur, pointant vers la position suivante du dernier élément du vecteur
  • ​​​​ :reverse_iterator rbegin() itérateur inverse, pointant vers le dernier élément
  • ​​​​ :reverse_iterator rend() Itérateur inverse, pointant vers la position avant le premier élément

5. Fonction de jugement

  • ​​​​:bool empty() const Détermine si le vecteur est vide, s'il est vide, il n'y a pas d'élément dans le vecteur

6. Fonction de taille

  • ​​​​:int size() const Renvoie le nombre d'éléments dans le vecteur
  • ​​​​:int capacity() const Renvoie la valeur maximale de l'élément que le vecteur actuel peut contenir
  • ​​​​:int max_size() const Renvoie le nombre maximal autorisé d'éléments vectoriels

7. Autres fonctions

  • ​​​​ :void swap(vector&) échange les données de deux vecteurs de même type
  • ​​​​:void assign(int n,const T& x) Définissez la valeur des n premiers éléments du vecteur sur x
  • ​​​​:void assign(const_iterator first,const_iterator last) Les éléments dans [first, last) dans le vecteur sont définis sur les éléments actuels du vecteur

8. Voir clairement

  1. push_back ajoute une donnée à la fin du tableau
  2. pop_back supprime les dernières données du tableau
  3. à Obtenir les données à la position numérotée
  4. begin obtient le pointeur vers la tête du tableau
  5. end Récupère le pointeur de la dernière unité du tableau + 1
  6. front obtient une référence à la tête du tableau
  7. back obtient une référence au dernier élément du tableau
  8. max_size obtient la taille maximale du vecteur
  9. capacité La taille de l'allocation actuelle du vecteur
  10. size La taille des données actuellement utilisées
  11. resize change la taille des données actuellement utilisées, si elle est plus grande que celle actuellement utilisée, ou remplit la valeur par défaut
  12. reserve Modifier la taille de l'espace alloué par le vecotr actuel
  13. erase supprime l'élément de données pointé par le pointeur
  14. clear efface le vecteur courant
  15. rbegin renvoie le pointeur de début après l'inversion du vecteur (en fait, c'est le end-1 d'origine)
  16. rend renvoie le pointeur de fin de la structure inverse du vecteur (en fait, c'est le début-1 d'origine)
  17. vide Détermine si le vecteur est vide
  18. échanger des données d'échange avec un autre vecteur

4. Utilisation de base

#include < vector> 
using namespace std;

Cinq, une brève introduction

  1. vecteur<type> identifiant
  2. identificateur de vecteur<type> (capacité maximale)
  3. identificateur de vecteur<type> (capacité maximale, initiale de toutes les valeurs)
  4. Int i[5]={1,2,3,4,5}vecteur<type>vi(I,i+2);//Obtenir la valeur de l'indice i après 3
  5. vector< vector< int> >v; Vecteur à deux dimensions//Le <> le plus à l'extérieur doit avoir des espaces. Sinon, il ne passera pas sous les anciens compilateurs

Six, exemples d'utilisation de vecteurs

Précautions d'utilisation du vecteur :

1. Si la longueur du vecteur que vous voulez représenter est longue (vous devez enregistrer beaucoup de nombres à l'intérieur du vecteur), cela entraînera facilement des fuites de mémoire et l'efficacité sera très faible ;

2. Lorsque vector est utilisé comme paramètre ou valeur de retour d'une fonction, vous devez faire attention à sa méthode d'écriture :

double Distance(vector<int>&a, vector<int>&b)

 Le "&" ne doit pas manquer ! ! !

Définition et initialisation des objets vectoriels

De même, avant utilisation, le fichier d'en-tête d'importation #include peut utiliser l'instruction using : using std::vector ; vector est un modèle de classe (modèle de classe). Utilisez des modèles pour écrire une définition de classe ou une définition de fonction pouvant être utilisée pour plusieurs types de données différents. Par conséquent, nous pouvons définir un vecteur pour stocker des objets de chaîne, ou un vecteur pour stocker des valeurs int, ou un vecteur pour stocker des objets de type classe personnalisés (tels que des objets Sales_items).
Pour déclarer un objet d'un certain type résultant d'un modèle de classe, vous devez fournir des informations supplémentaires, le type d'informations dépend du modèle. En prenant vector comme exemple, il est nécessaire de spécifier le type d'objet que contient le vecteur, en spécifiant le type en plaçant le type entre crochets après le nom du modèle de classe :

vecteur<T> v1 ; Le type de sauvegarde est l'objet T. Le constructeur par défaut v1 est vide.
vecteur<T> v2(v1);  v2 est une copie de v1.
vecteur<T> v3(n, i); v3 contient n éléments de valeur i.
vecteur<T> v4(n);  v4 contient n copies d'éléments initialisés par valeur.

[Remarque : 1. Si vous souhaitez créer un objet vectoriel non vide, vous devez donner la valeur de l'élément d'initialisation ; 2. Lors de la copie d'un objet vectoriel vers un autre objet vectoriel, chaque élément du vecteur nouvellement copié est initialisé à la vecteurs originaux Une copie de l'élément correspondant dans . Mais les deux objets vectoriels doivent enregistrer le même type d'élément 3. L'objet vectoriel peut être initialisé avec le nombre d'éléments et la valeur de l'élément. Le constructeur utilise le nombre d'éléments pour déterminer
le nombre d'éléments stockés dans l'objet vectoriel, et la valeur de l'élément spécifie la valeur initiale de chaque élément]

L'objet vectoriel grandit dynamiquement :

Une propriété importante des objets vectoriels (et d'autres objets conteneurs de bibliothèque standard) est que les éléments peuvent être ajoutés efficacement lors de l'exécution.

Remarque : En raison de la grande efficacité de la croissance vectorielle, il est préférable d'ajouter des éléments dynamiquement lorsque les valeurs des éléments sont connues.

Exemple:

vector<int>test;//Créer un vecteur, int est le type de données de l'élément du tableau, test est le nom du tableau dynamique

La manière simple de l'utiliser est la suivante :

vector<int>test;//建立一个vector
test.push_back(1);
test.push_back(2);//把1和2压入vector,这样test[0]就是1,test[1]就是2

Exemple:

vector<vector<Point2f> > points; //定义一个二维数组
points[0].size();  //指第一行的列数

1. Fonctionnement de base

(1) Fichier d'en-tête #include<vector>.

(2) Créer un objet vectoriel,vector<int> vec​ ;

(3) Insérez des chiffres à la fin :vec.push_back(a)​ ​ ;

(4) Utilisez des indices pour accéder aux éléments,cout<<vec[0]<<endl​   ; Rappelez-vous que les indices commencent à partir de 0.

(5) Utilisez des itérateurs pour accéder aux éléments.

vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
    cout<<*it<<endl;

(6) Insérer un élément :vec.insert(vec.begin()+i,a)​           ; Insérez un devant le i+1ème élément ;

(7) Supprimer l'élément : vec.erase(vec.begin()+2); supprimer le troisième élément

​​           ;vec.erase(vec.begin()+i,vec.end()+j) Supprimez l'intervalle [i,j-1] L'intervalle commence à partir de 0

(8) Taille du vecteur :vec.size() ;

(9) Vide :vec.clear() ;

Note spéciale : voici les différences entre les fonctions begin() et end(), front() et back()

2. Consignes importantes

Les éléments du vecteur peuvent non seulement être int, double, string mais aussi structure, mais attention : la structure doit être définie comme globale, sinon une erreur se produira.

#include<stdio.h>  
#include<algorithm>  
#include<vector>  
#include<iostream>  
using namespace std;  
typedef struct rect  
{  
    int id;  
    int length;  
    int width;  
  //对于向量元素是结构体的,可在结构体内部定义比较函数,下面按照id,length,width升序排序。  
  bool operator< (const rect &a)  const  
    {  
        if(id!=a.id)  
            return id<a.id;  
        else  
        {  
            if(length!=a.length)  
                return length<a.length;  
            else  
                return width<a.width;  
        }  
    }  
}Rect;  
int main()  
{  
    vector<Rect> vec;  
    Rect rect;  
    rect.id=1;  
    rect.length=2;  
    rect.width=3;  
    vec.push_back(rect);  
    vector<Rect>::iterator it=vec.begin();  
    cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl;      
return 0;  
}  

3. Algorithme

(1) Utilisez reverse pour retourner l'élément : le fichier d'en-tête #include<algorithm> est requis

reverse(vec.begin(), vec.end()); Retourner les éléments, c'est-à-dire les disposer dans l'ordre inverse !

(Dans le vecteur r, si deux itérateurs sont requis dans une fonction, ce dernier n'est généralement pas inclus)

(2) Utilisez sort pour trier : le fichier d'en-tête #include<algorithme> est requis,

sort(vec.begin(), vec.end()); (la valeur par défaut est dans l'ordre croissant, c'est-à-dire de petit à grand).

Vous pouvez comparer dans l'ordre décroissant en réécrivant la fonction de comparaison de tri, comme suit :

Définir la fonction de comparaison de tri :

bool Comp(const int &a,const int &b)
{
    return a>b;
}

Lors de l'appel : sort(vec.begin(),vec.end(),Comp), afin qu'ils soient triés par ordre décroissant. 

Sortir les éléments dans le vecteur   

vecteur<float> vecClass ; 

int nSize = vecClass.size();   

 //Imprime vecClass, méthode un :  

for(int i=0;i<nSize;i++)    
{    
   cout<<vecClass[i]<<"     ";    
}    
   cout<<endl;   

Il convient de noter que : lors de l'utilisation de la méthode 1 pour la sortie, le tableau suivant du tableau doit être garanti comme étant un entier.

 //Imprime vecClass, méthode 2 :     

for(int i=0;i<nSize;i++)    
{    
   cout<<vecClass.at(i)<<"     ";    
}    
   cout<<endl;    

//Imprime vecClass, méthode trois : il n'est pas pratique de sortir une valeur spécifiée

for(vector<float>::iterator it = vecClass.begin();it!=vecClass.end();it++)    
{    
    cout<<*it<<"   ";    
}    
    cout<<endl;    

Utilisation de tableaux à deux dimensions :

#include "stdafx.h"  
#include <cv.h>  
#include <vector>   
#include <iostream>   
using namespace std;  
int main()  
{  
    using namespace std;  
    int out[3][2] = { 1, 2,   
             3, 4,  
            5, 6 };  
    vector <int*> v1;  
    v1.push_back(out[0]);  
    v1.push_back(out[1]);  
    v1.push_back(out[2]);  
    cout << v1[0][0] << endl;//1  
    cout << v1[0][1] << endl;//2  
    cout << v1[1][0] << endl;//3  
    cout << v1[1][1] << endl;//4  
    cout << v1[2][0] << endl;//5  
    cout << v1[2][1] << endl;//6  
    return 0;  
}  

Guess you like

Origin blog.csdn.net/m0_69824302/article/details/132129562
Recommended