Comment utiliser le vecteur C ++

Comment utiliser le vecteur C ++
Un tableau est une série de mêmes types d'objets dans des emplacements de mémoire consécutifs. Un tableau ne peut pas augmenter le minerai en longueur. Un vecteur est comme un tableau, mais sa longueur peut être augmentée ou réduite. Un vecteur a donc beaucoup plus d'opérations qu'un tableau. C ++ a de nombreuses bibliothèques, qui forment toutes la bibliothèque standard C ++. L'une de ces bibliothèques est la bibliothèque de conteneurs. Un conteneur est une collection d'objets, et certaines opérations peuvent être effectuées sur la collection. Les conteneurs C ++ peuvent être regroupés en deux ensembles: conteneurs de séquence et conteneurs associatifs. Les conteneurs de séquence sont un vecteur, un tableau (pas le même tableau discuté précédemment), Deque, Forward_List et List. Ce sont des collections différentes (structures de données de type tableau), et chacune offre des compromis distincts. Tout programmeur doit savoir comment utiliser si vous devez utiliser un vecteur, un tableau, un déso. Lorsqu'un programmeur a besoin d'une structure qui nécessite plus d'opérations que celles associées à un tableau ordinaire, le tableau ordinaire ne doit pas être utilisé. Si la tâche implique des insertions et des suppressions fréquentes au milieu de la séquence, alors une liste ou un avantage doit être utilisé. Si la tâche implique des insertions et des suppressions fréquentes au début ou à la fin d'une séquence, alors un désactivation doit être utilisé. Un vecteur doit être utilisé lorsque ces types d'opérations ne sont pas requis. Cet article vous montre comment utiliser le vecteur C ++. Vous aurez besoin d'une certaine connaissance des pointeurs C ++, références et tableaux pour comprendre cet article.

Classe et objets

Une classe est un ensemble de variables et de fonctions qui fonctionnent ensemble, où les variables n'ont pas de valeurs attribuées. Lorsque des valeurs sont affectées aux variables, une classe devient un objet. Différentes valeurs données à la même classe entraînent différents objets; c'est-à-dire que différents objets peuvent être de la même classe mais ont des valeurs différentes. La création d'un objet à partir d'une classe est également connue sous le nom d'instanciation de l'objet.

Le terme vecteur décrit une classe. Un objet créé à partir d'un vecteur a un nom choisi par le programmeur.

Une fonction qui appartient à une classe est nécessaire pour instancier un objet de la classe. En C ++, cette fonction a le même nom que le nom de la classe. Différents objets créés (instanciés) à partir de la classe ont des noms distincts donnés à chacun d'eux par le programmeur.

La création d'un objet à partir d'une classe signifie la construction de l'objet; Cela signifie également instancier l'objet.

La classe vectorielle

La classe vectorielle a déjà été définie et se trouve dans la bibliothèque. Pour utiliser la classe vectorielle, un programmeur doit inclure l'en-tête vectoriel dans le fichier avec la directive de prétraitement suivante:

#inclure

Une fois l'en-tête inclus, toutes les fonctionnalités vectorielles (membres de données et fonctions membres) deviennent accessibles. Pour utiliser l'objet Count pour sortir des données sur le terminal (console), l'en-tête de l'objet doit également être inclus. Pour écrire un programme avec le vecteur, au minimum, les en-têtes suivants doivent être inclus:

#inclure
#inclure

Instanciation d'un vecteur

int foo [10];

Ci-dessus se trouve la déclaration d'un tableau avec le nom «foo» et le nombre d'éléments «10."Ceci est un éventail d'entiers. La déclaration d'un vecteur est similaire. Pour un vecteur, le nombre d'éléments est facultatif, car la longueur du vecteur peut augmenter ou diminuer.

À ce stade du programme, la classe vectorielle a déjà été définie dans la bibliothèque, et l'en-tête a été inclus. Le vecteur peut être instancié comme suit:

STD :: Vector vtr (8);

Ici, le vecteur est de la fonction de constructeur spécial. Le type de données que le vecteur conservera est «int», dans les supports d'angle. Le terme «VTR» est le nom choisi par le programmeur pour le vecteur. Enfin, «8», entre parenthèses, est le nombre provisoire d'entiers que le vecteur aura.

Le terme «MST» signifie espace de noms standard. Ce terme doit être suivi d'un double côlon, dans ce contexte. Tout le monde peut écrire sa propre bibliothèque de classe vectorielle et l'utiliser. Cependant, C ++ a déjà une bibliothèque standard avec des noms standard, y compris «Vector.«Pour utiliser un nom standard, le nom standard doit être précédé de Std :: . Pour éviter de taper std :: chaque fois dans le programme pour un nom standard, le fichier du programme peut démarrer comme suit:

#inclure
#inclure
Utilisation de Namespace Std;

Surchargez une fonction

Lorsque deux ou plusieurs signatures de fonction ont le même nom, ce nom est considéré comme surchargé. Lorsqu'une fonction est appelée, le nombre et le type d'arguments déterminent quelle fonction est exécutée.

Construire un vecteur

Construire un vecteur signifie instanciation (création) d'un objet vectoriel. La fonction du constructeur est surchargée comme suit:

nom vecteur

Cela crée un vecteur de longueur zéro et de type «t."L'énoncé suivant crée un vecteur de longueur zéro du type" float "avec le nom" Vtr: "

vecteur Vtr;

Nom du vecteur (n)

Cela crée un vecteur avec n éléments de type «t.«Une déclaration pour ce vecteur avec quatre éléments flottants est le suivant:

vecteur vtr (4);

Nom du vecteur (n, t)

Cela crée un vecteur de n éléments initialisés à la valeur t. L'énoncé suivant crée un vecteur de 5 éléments, où chaque élément a la valeur 3.4:

vecteur VTR (5, 3.4);

Construction avec initialisation

Un vecteur peut être construit (créé) et initialisé en même temps, de l'une des deux façons suivantes:

vecteur vtr = 1.1, 2.2, 3.3, 4.4;

Ou

vecteur vtr 1.1, 2.2, 3.3, 4.4;

Notez qu'il n'y a pas de parenthèses juste après le nom de l'objet. Les parenthèses utilisées juste après que le nom de l'objet devrait avoir la liste d'initialisateur, comme suit:

vecteur vtr (1.1, 2.2, 3.3, 4.4);

Un vecteur peut être construit et initialisé plus tard avec la liste d'initialisateur. Dans ce cas, les parenthèses ne seront pas utilisées:

vecteur Vtr;
vtr = 1.1, 2.2, 3.3, 4.4;

Vector V2 (V1)

Ceci est un constructeur de copie. Il crée un vecteur v2 comme copie du vecteur v1. Le code suivant illustre ceci:

vecteur vtr1 (5, 3.4);
vecteur vtr2 (vtr1);

Attribuer un vecteur pendant la construction

Pendant la construction, un vecteur vide peut être créé tandis qu'un autre lui est affecté, comme suit:

vecteur vtr1 1.1, 2.2, 3.3, 4.4;
vecteur vtr2 = vtr1;

La deuxième déclaration est équivalente à:

vecteur vtr2 = 1.1, 2.2, 3.3, 4.4;

vctor de constance

Un vecteur de const est un vecteur dont les éléments ne peuvent pas être modifiés. Les valeurs de ce vecteur sont en lecture seule. Lorsqu'il est créé, le vecteur apparaît comme suit:

vctor de constance vtr 1.1, 2.2, 3.3, 4.4;

Dans ce type de vecteur, aucun élément ne peut être ajouté ou supprimé. De plus, aucune valeur ne peut être modifiée.

Construire avec itérateur

Un modèle fournit une représentation générique pour un type de données. Un itérateur fournit une représentation générique du balayage à travers les valeurs d'un conteneur. La syntaxe pour créer un vecteur avec un itérateur est la suivante:

modèle
VECTOR (Inputiterator First, Inputiterator Last, const Allocator & = allocator ());

Cela construit un vecteur pour la gamme [d'abord, dernier) en utilisant l'allocateur spécifié, qui sera discuté plus loin dans cet article.

Détruire un vecteur

Pour détruire un vecteur, permettez-le simplement de sortir de la portée et de détruire est géré automatiquement.

Capacité vectorielle

size_type Capacité () const Noexcept

Le nombre total d'éléments que le vecteur peut contenir sans nécessiter de réallocation est renvoyé par la fonction membre de la capacité. Un segment de code pour cela est le suivant:

vecteur vtr (4);
int num = vtr.capacité();
couter << num << '\n';

La sortie est 4.

réserve (n)

L'espace mémoire n'est pas toujours disponible librement. L'espace supplémentaire peut être réservé à l'avance. Considérez le segment de code suivant:

vecteur vtr (4);
vtr.réserve (6);
couter << vtr.capacity() << '\n';

La sortie est 6. Ainsi, l'espace supplémentaire réservé est de 6 à 4 = 2 éléments. La fonction renvoie vide.

size () const noexcept

Cela renvoie le nombre d'éléments dans le vecteur. Le code suivant illustre cette fonction:

vecteur vtr (4);
float sz = vtr.taille();
couter << sz << '\n';

La sortie est 4.

shrink_to_fit ()

Après avoir donné une capacité supplémentaire à un vecteur avec la fonction de réserve (), le vecteur peut être dimensionné pour s'adapter à sa taille d'origine. Le code suivant illustre ceci:

vecteur vtr (4);
vtr.réserve (6);
vtr.shrink_to_fit ();
int sz = vtr.taille();
couter << sz << '\n';

La sortie est 4 et non 6. La fonction renvoie vide.

redimensionner (sz), redimensionner (sz, c)

Cela redimensionne le vecteur. Si la nouvelle taille est plus petite que l'ancienne taille, les éléments vers la fin sont effacés. Si la nouvelle taille est plus longue, une valeur par défaut est ajoutée à la fin. Pour avoir une valeur ajoutée particulière, utilisez la fonction redimensive () avec deux arguments. Le segment de code suivant illustre l'utilisation de ces deux fonctions:

vecteur vtr1 1.1, 2.2, 3.3, 4.4;
vtr1.redimensionner (2);
couter << "New size of vtr1: " << vtr1.size() << '\n';
vecteur vtr2 1.1, 2.2;
vtr2.redimensionner (4, 8.8);
couter << "vtr2: "<< vtr2[0] <<" "<< vtr2[1] <<"
"<< vtr2[2] <<" "<< vtr2[3] << '\n';

La sortie est la suivante:

Nouvelle taille de Vtr1: 2
vtr2: 1.1 2.2 8.8 8.8

Les fonctions renvoient vide.

vide () const noexcept

Cette fonction renvoie 1 pour true s'il n'y a pas d'éléments dans le vecteur et 0 pour false si le vecteur est vide. Si un vecteur a 4 emplacements pour un type particulier de données, comme le flotteur, sans aucune valeur de flottante, alors ce vecteur n'est pas vide. Le code suivant illustre ceci:

vecteur Vtr;
couter << vtr.empty() << '\n';
vecteur VT (4);
couter << vt.empty() << '\n';
vecteur V (4,3.5);
couter << v.empty() << '\n';

La sortie est la suivante:

1
0
0

Accès à l'élément vecteur

Un vecteur peut être sous-scripté (indexé) comme un tableau. Le comptage d'index commence à partir de zéro.

vectorname [i]

L'opération «Vectorname [i]» renvoie une référence à l'élément au ie Index du vecteur. Le code suivant sortira 3.3 pour le vecteur ci-dessus:

vecteur vtr 1.1, 2.2, 3.3, 4.4;
float fl = vtr [2];
couter << fl << '\n';

vectorname [i] const

L'opération «Vectorname [i] const» est exécutée au lieu de «Vectorname [i]» lorsque le vecteur est un vecteur constant. Cette opération est utilisée dans le code suivant:

vctor de constance vtr 1.1, 2.2, 3.3, 4.4;
float fl = vtr [2];
couter << fl << '\n';

L'expression renvoie une référence constante au ie élément du vecteur.

Attribuer une valeur avec un indice

Une valeur peut être attribuée à un vecteur non constant, comme suit:

vecteur vtr 1.1, 2.2, 3.3, 4.4;
vtr [2] = 8.8;
couter << vtr[2] << '\n';

La sortie est 8.8.

nom vectornal.à (i)

«Vectorname.à (i) "est comme" Vectorname [i] ", mais" Vectorname.à (i) ”est plus fiable. Le code suivant montre comment ce vecteur doit être utilisé:

vecteur vtr 1.1, 2.2, 3.3, 4.4;
float fl = vtr.à 2 heures);
couter << fl << '\n';
AT () est une fonction de membre vectoriel.

nom vectornal.à (i) const

«Vectorname.à (i) const »est comme« Vectorname [i] const », mais« vectorname.à (i) const ”est plus fiable. «Vectorname.à (i) const ”est exécuté au lieu de« Vectorname.à (i) ”lorsque le vecteur est un vecteur constant. Ce vecteur est utilisé dans le code suivant:

vctor de constance vtr 1.1, 2.2, 3.3, 4.4;
float fl = vtr.à 2 heures);
couter << fl << '\n';
AT () const est une fonction de membre vectoriel.

Attribution d'une valeur avec la fonction AT ()

Une valeur peut être attribuée à un vecteur non constant avec la fonction AT (), comme suit:

vecteur vtr 1.1, 2.2, 3.3, 4.4;
vtr.à (2) = 8.8;
couter << vtr[2] << '\n';

La sortie est 8.8.

Problème avec le sous-scénario

Le problème avec le sous-scripting (indexation) est que si l'index est hors de portée, zéro peut être renvoyé ou une erreur peut être émise au moment de l'exécution.

devant()

Cela renvoie une référence au premier élément du vecteur sans retirer l'élément. La sortie du code suivant est 1.1.

vecteur vtr 1.1, 2.2, 3.3, 4.4;
float fl = vtr.devant();
couter << fl << '\n';

L'élément n'est pas supprimé du vecteur.

Front () const

Lorsque la construction vectorielle est précédée par const, l'expression «front () const» est exécutée au lieu de «Front ()."Ceci est utilisé dans le code suivant:

vctor de constance vtr 1.1, 2.2, 3.3, 4.4;
float fl = vtr.devant();
couter << fl << '\n';

Une référence constante est retournée. L'élément n'est pas supprimé du vecteur.

dos()

Cela renvoie une référence au dernier élément du vecteur sans retirer l'élément. La sortie du code suivant est 4.4.

vecteur vtr 1.1, 2.2, 3.3, 4.4;
float fl = vtr.dos();
couter << fl << '\n';

back () const

Lorsque la construction vectorielle est précédée par const, l'expression «back () const» est exécutée au lieu de «back ()."Ceci est utilisé dans le code suivant:

vctor de constance vtr 1.1, 2.2, 3.3, 4.4;
float fl = vtr.dos();
couter << fl << '\n';

Une référence constante est retournée. L'élément n'est pas supprimé du vecteur.

Accès aux données vectorielles

data () noexcept; data () const noExcept;

L'un ou l'autre renvoie un pointeur tel que [data (), data () + size ()) est une plage valide.

Cela sera couvert plus en détail plus loin dans l'article.

Les itérateurs de retour et le vecteur

Un itérateur est comme un pointeur mais a plus de fonctionnalité qu'un pointeur.

begin () noexcept

Renvoie un itérateur qui pointe vers le premier élément du vecteur, comme dans le segment de code suivant:

vecteur vtr 1.1, 2.2, 3.3, 4.4;
vecteur:: iterator iter = vtr.commencer();
couter << *iter << '\n';

La sortie est 1.1. Notez que la déclaration qui reçoit l'itérateur a été déclarée. L'itérateur est déréféré dans une expression de retour pour obtenir la valeur de la même manière qu'un pointeur est déréférencé.

begin () const noexcept;

Renvoie un itérateur qui pointe vers le premier élément du vecteur. Lorsque la construction vectorielle est précédée par const, l'expression «begin () const» est exécutée au lieu de «begin ().«Dans cette condition, l'élément correspondant du vecteur ne peut pas être modifié. Ceci est utilisé dans le code suivant:

vctor de constance vtr 1.1, 2.2, 3.3, 4.4;
vecteur:: const_iterator iter = vtr.commencer();
couter << *iter << '\n';

La sortie est 1.1. Notez que «const_iterator» a été utilisé cette fois au lieu de simplement «itérateur» pour recevoir l'itérateur retourné.

end () noexcept

Renvoie un itérateur qui pointe immédiatement au-delà du dernier élément du vecteur. Considérez le segment de code suivant:

vecteur vtr 1.1, 2.2, 3.3, 4.4;
vecteur:: iterator iter = vtr.fin();
couter << *iter << '\n';

La sortie est 0, ce qui n'a pas de sens, car il n'y a pas d'élément concret au-delà du dernier élément.

end () const noexcept

Renvoie un itérateur qui pointe immédiatement au-delà du dernier élément du vecteur. Lorsque la construction vectorielle est précédée par «const», l'expression «end () const» est exécutée à la place de «end ().«Considérez le segment de code suivant:

vctor de constance vtr 1.1, 2.2, 3.3, 4.4;
vecteur:: const_iterator iter = vtr.fin();
couter << *iter << '\n';

La sortie est 0. Notez que «const_iterator» a été utilisé cette fois au lieu de simplement «itérateur» pour recevoir l'itérateur retourné.

Itération inversée

Il est possible d'avoir un itérateur qui itérara de la fin à juste avant le premier élément.

rbegin () noexcept

Renvoie un itérateur qui pointe vers le dernier élément du vecteur, comme dans le segment de code suivant:

vecteur vtr 1.1, 2.2, 3.3, 4.4;
vecteur:: reverse_iterator riter = vtr.rbegin ();
couter << *rIter << '\n';

La sortie est 4.4.

Notez que la déclaration qui reçoit l'itérateur inversé a été déclarée. L'itérateur est déréféré dans une expression de retour pour obtenir la valeur de la même manière qu'un pointeur est déréférencé.

rbegin () const noExcept;

Renvoie un itérateur qui pointe vers le dernier élément du vecteur. Lorsque la construction vectorielle est précédée de «const», l'expression «rbegin () const» est exécutée à la place de «rbegin ().«Dans cette condition, l'élément correspondant du vecteur ne peut pas être modifié. Cette fonctionnalité est utilisée dans le code suivant:

vctor de constance vtr 1.1, 2.2, 3.3, 4.4;
vecteur:: const_reverse_iterator riter = vtr.rbegin ();
couter << *rIter << '\n';

La sortie est 4.4.

Notez que la const_reverse_iterator a été utilisée cette fois, au lieu du reverse_iterator, pour recevoir l'itérateur retourné.

Rend () Noexcept

Renvoie un itérateur qui pointe juste avant le premier élément du vecteur. Considérez le segment de code suivant:

vecteur vtr 1.1, 2.2, 3.3, 4.4;
vecteur:: reverse_iterator riter = vtr.déchirer();
couter << *rIter << '\n';

La sortie est 0, ce qui n'a pas de sens, car il n'y a pas d'élément concret juste avant le premier élément.

Rend () Const noexcept

Renvoie un itérateur qui pointe juste avant le premier élément du vecteur. Lorsque la construction vectorielle est précédée par «const», l'expression «Rend () const» est exécutée au lieu de «Rend ().«Considérez le segment de code suivant:

vctor de constance vtr 1.1, 2.2, 3.3, 4.4;
vecteur:: const_reverse_iterator riter = vtr.déchirer();
couter << *rIter << '\n';

La sortie est 0.

Notez que la const_reverse_iterator a été utilisée cette fois, au lieu du reverse_iterator, pour recevoir l'itérateur retourné.

Modificateurs vectoriels

Un modificateur qui modifie le vecteur peut prendre ou retourner un itérateur.

un.EMPLACE (P, Args)

Insère un objet de type T construit avec std :: en avant (args)… avant p.

Pour plus de détails - voir plus tard

insert (iteratorposition, valeur)

Insère une copie de la valeur à la position de l'itérateur du vecteur. Renvoie l'itérateur (position) dans le vecteur où la copie a été placée. Le code suivant montre où la valeur a été placée:

vecteur vtr 10, 20, 30, 40;
vecteur:: iterator iter = vtr.commencer();
++iter;
++iter;
vtr.insérer (iter, 25);
couter << vtr[1] << " << vtr[2]<< '
' << vtr[3] << '\n';

La sortie est: 20 25 30.

Notez que l'itérateur a été avancé (incrémenté) tout comme un pointeur.

Une liste d'initialisateur peut également être insérée, comme le code suivant illustre:

vecteur vtr 10, 20, 30, 40;
vecteur:: iterator iter = vtr.commencer();
++iter;
++iter;
vtr.insert (iter, 25, 28);
couter << vtr[1] << " << vtr[2]<< '
' << vtr[3]<< " << vtr[4] << '\n';

La sortie est: 20 25 28 30.

Effacer (position)

Supprime un élément à la position pointée par l'itérateur, puis renvoie la position de l'itérateur. Le code suivant illustre ceci:

vecteur vtr 10, 20, 30, 40;
vecteur:: iterator iter = vtr.commencer();
++iter;
++iter;
vtr.effacer (iter);
couter << vtr[0] << " << vtr[1] << '
' << vtr[2]<< '\n';

La sortie est: 10 20 40

push_back (t), push_back (RV)

Utilisé pour ajouter un seul élément à la fin du vecteur. Utilisez push_back (t) comme suit:

vecteur vtr 1.1, 2.2, 3.3, 4.4;
vtr.push_back (5.5);
float fl = vtr [4];
couter << fl << '\n';

La sortie est 5.5.

push_back (RV): - Voir plus tard.

pop_back ()

Supprime le dernier élément sans le retourner. La taille du vecteur est réduite de 1. Le code suivant illustre ceci:

vecteur vtr 1.1, 2.2, 3.3, 4.4;
vtr.pop_back ();
float sz = vtr.taille();
couter << sz << '\n';

La sortie est 3.

un.échange (b)

Deux vecteurs peuvent être échangés, comme illustré dans le segment de code suivant:

vecteur vtr1 1.1, 2.2, 3.3, 4.4;
vecteur vtr2 10, 20;
vtr1.échange (vtr2);
couter << "vtr1: "<< vtr1[0] <<" "<< vtr1[1] <<"
"<< vtr1[2] <<" "<< vtr1[3] << '\n';
couter << "vtr2: "<< vtr2[0] <<" "<< vtr2[1] <<"
"<< vtr2[2] <<" "<< vtr2[3] << '\n';

La sortie est:

vtr1: 10 20 0 0
vtr2: 1.1 2.2 3.3 4.4

Notez que la longueur d'un vecteur augmente, si nécessaire. De plus, les valeurs qui n'ont pas eu de remplacements sont remplacées par une valeur par défaut.

clair()

Supprime tous les éléments du vecteur, comme l'illustre le segment de code suivant:

vecteur vtr 1.1, 2.2, 3.3, 4.4;
vtr.clair();
couter << vtr.size() << '\n';

La sortie est 0.

Égalité et opérateurs relationnels pour les vecteurs

L'opérateur ==

Renvoie 1 pour true si les deux vecteurs ont la même taille et que les éléments correspondants sont égaux; Sinon, il renvoie 0 pour false. Par exemple:

vecteur U 1, 2, 3;
vecteur V 4, 5, 6;
bool bl = u == v;
couter << bl << '\n';

La sortie est 0.

Le != Opérateur

Renvoie 1 pour true si les deux vecteurs n'ont pas la même taille et / ou les éléments correspondants ne sont pas égaux; Sinon, il renvoie 0 pour false. Par exemple:

vecteur U 1, 2, 3;
vecteur V 4, 5, 6;
bool bl = u!= V;
couter << bl << '\n';

La sortie est 1.

Le < Operator

Renvoie 1 pour true si le premier vecteur est le sous-ensemble initial du deuxième vecteur, les éléments des deux parties égales étant identiques et dans le même ordre. Si les deux vecteurs sont de la même taille et se déplacent de gauche à droite et qu'un élément est rencontré dans le premier vecteur qui est inférieur à l'élément correspondant dans le deuxième vecteur, alors 1 sera toujours retourné. Sinon, 0 pour false est retourné. Par exemple:

vecteur U 3, 1, 1;
vecteur V 3, 2, 1;
bool bl = ucouter << bl << '\n';

La sortie est 1. < does not include the case when the size and order are the same.

L'opérateur>

Retour !(U < V), where U is the first vector and V is the second vector, according to the above definitions.

Le <= Operator

Renvoie u <= V, where U is the first vector and V is the second vector, according to the above definitions.

L'opérateur> =

Retour !(U <= V), where U is the first vector and V is the second vector, according to the above definitions.

Conclusion

Un vecteur est un exemple de conteneur de séquence. Un vecteur est une «meilleure» forme du tableau ordinaire et est instanciée d'une classe. Les vecteurs ont des méthodes classifiées sous: construction et affectation, capacité, accès aux éléments, accès aux données, itérateurs, modificateurs et opérateurs surchargés numériques.

Il existe d'autres conteneurs de séquence, appelés List, Forward_List et Array. Si la tâche implique des insertions et des suppressions fréquentes au milieu de la séquence, alors une liste ou un avantage doit être utilisé. Si la tâche implique des insertions et des suppressions fréquentes au début ou à la fin de la séquence, alors un désactivation doit être utilisé. Et donc, les vecteurs ne doivent être utilisés que lorsque ces types d'opérations ne sont pas importants.