C++ est l'un des langages de programmation les plus puissants et les plus intimidants que vous puissiez rencontrer en tant que débutant. La raison est assez simple. Il faut beaucoup de code pour obtenir le résultat souhaité. La bibliothèque de modèles standard, ou STL, peut vous aider à résoudre cette énigme.
Compte tenu du temps et des efforts consacrés à l'écriture de code pour des fonctions telles que le tri et la recherche, STL peut vous aider à effectuer toutes ces opérations avec une seule ligne de code. Cette bibliothèque peut être extrêmement utile pour la résolution de problèmes et la préparation d'entretiens techniques.
Qu'est-ce que la bibliothèque de modèles standard ?
La bibliothèque de modèles standard, ou STL, est une bibliothèque C++ qui se compose de fonctions et de conteneurs prédéfinis. Il comprend des classes de modèles importantes pour les structures de données courantes telles que les vecteurs, les piles, les files d'attente et certaines fonctions algorithmiques pratiques telles que la recherche binaire pour faciliter la programmation.
La bibliothèque de modèles standard en C++ se compose de quatre composants:
- Algorithmes
- Conteneurs
- Les fonctions
- Itérateurs
Examinons plus en détail les algorithmes et les conteneurs, car ce sont les composants les plus couramment utilisés de la STL.
Algorithmes en STL
le Le fichier d'en-tête est une partie de la STL qui se compose de plusieurs fonctions algorithmiques qui peuvent être utilisées au lieu de les coder manuellement. Certains des algorithmes inclus sont la recherche binaire, le tri et l'inversion, qui sont extrêmement utiles.
Pour commencer, vous devez importer le en-tête dans votre fichier C++. La syntaxe est la suivante:
#inclure
Pour les méthodes à venir, considérons une variable de tableau avec les valeurs de {6, 2, 9, 1, 4} comme exemple.
int arr[] = {6, 2, 9, 1, 4} ;
sorte()
le sorte() La fonction vous aide à trier tous les éléments à l'intérieur de la structure de données spécifiée dans l'ordre croissant. Cette fonction prend deux paramètres: l'itérateur de départ et l'itérateur de fin.
En rapport: Une introduction à l'algorithme de tri par fusion
Syntaxe:
trier (start_iterator, end_iterator);
Voici un exemple rapide:
trier (arr, arr+5) ;
pour (entier i = 0; je < 5; i++) {
cout << arr[i] << " " ;
}
Production:
1 2 4 6 9
sens inverse()
le sens inverse() La fonction inverse l'ordre des éléments dans la structure de données spécifiée. Il accepte deux paramètres: l'itérateur de départ et l'itérateur de fin.
Syntaxe:
reverse (start_iterator, end_iterator);
Voici un court exemple de la méthode ci-dessus:
inverse (arr, arr+5) ;
pour (entier i = 0; je < 5; i++) {
cout << arr[i] << " " ;
}
Production:
4 1 9 2 6
*min_element() et *max_element()
Les fonctions *élément_max() et *min_element() renvoie respectivement la valeur maximale et minimale à l'intérieur de la structure de données spécifiée. Ces deux fonctions acceptent deux arguments: l'itérateur de début et l'itérateur de fin.
Syntaxe:
*max_element (start_iterator, end_iterator);
*min_element (start_iterator, end_iterator);
Voyons quelles valeurs renvoient ces fonctions en les appelant sur le tableau d'exemple:
cout << *max_element (arr, arr+5) << endl;
cout << *min_element (arr, arr+5) << endl;
Production:
9
1
recherche binaire()
le recherche binaire() La méthode est utilisée pour déterminer si la valeur spécifiée est présente ou non dans la structure de données. Il accepte trois arguments: l'itérateur de départ, l'itérateur de fin et la valeur que vous souhaitez rechercher.
La recherche binaire ne fonctionne que sur les structures de données triées. Par conséquent, vous devrez appeler le sorte() méthode avant la recherche binaire() méthode.
Syntaxe:
binary_search (start_iterator, end_iterator, value_to_find)
Voici une démonstration de cette méthode:
trier (arr, arr+5) ;
recherche_binaire (arr, arr+5, 2)? cout << "Élément trouvé": cout << "Élément non trouvé";
recherche_binaire (arr, arr+5, 7)? cout << "Élément trouvé": cout << "Élément non trouvé";
Production:
Élément trouvé
Élément introuvable
compter()
le compter() La méthode renvoie le nombre d'occurrences de la valeur spécifiée dans la structure de données. Il prend trois arguments: l'itérateur de début, l'itérateur de fin et la valeur à compter.
Syntaxe:
count (start_iterator, end_iterator, value_to_count);
Voici un exemple de cette méthode:
cout << compte (arr, arr+5, 2) << endl;
Production:
1
Conteneurs en STL
Les conteneurs sont les structures de données qui stockent les objets et les données. Les vecteurs, les listes, les piles, les files d'attente, les ensembles et les cartes sont quelques-uns des exemples qui y stockent des données en fonction du type de données primitif spécifié. Vous pouvez utiliser ces conteneurs en important leurs en-têtes respectifs dans le fichier C++.
Lors de l'initialisation de la variable de conteneur, vous devez mentionner les données primitives telles que entier, carboniser, chaîne à l'intérieur de <> supports.
Explorons certains de ces conteneurs plus en détail:
Vecteur
Les vecteurs sont des tableaux dynamiques redimensionnables et flexibles à utiliser. Lorsque vous insérez ou supprimez un élément du vecteur, il ajuste automatiquement la taille du vecteur. Ceci est similaire au Structure de données ArrayList à Java.
Syntaxe:
#inclure
vecteur Nom de variable;
Voici quelques méthodes vectorielles importantes:
- push_back (valeur): Cette méthode ajoute les données au vecteur.
- pop_back(): Cette méthode supprime le dernier élément du vecteur.
- insérer (index, valeur): Cette méthode insère de nouveaux éléments avant l'élément à la position spécifiée.
- Taille(): Cette méthode renvoie la taille du vecteur.
- vider(): Cette méthode vérifie si le vecteur est vide ou non.
- de face(): Cette méthode renvoie la première valeur du vecteur.
- dos(): La méthode back renvoie la dernière valeur du vecteur.
- à (index): Cette méthode renvoie la valeur à la position spécifiée.
- effacer (indexer): La méthode d'effacement supprime des éléments de l'index donné.
- dégager(): Cette méthode efface tous les éléments du vecteur.
vecteur < entier > v = { 23, 12, 56, 10 } ;
v.push_back (5) ;
v.push_back (25);
v.pop_back();
auto i = v.insert (v.begin() + 1, 7);
cout << "La taille du vecteur donné" << v.size() << endl;
if (v.vide()) {
cout << "Le vecteur est vide" << endl;
} autre {
cout << "Le vecteur n'est pas vide" << endl;
}
cout << "L'élément à la première position est " << v.front() << endl;
cout << "L'élément à la dernière position est " << v.back() << endl;
cout << "L'élément à la position donnée est " << v.at (4) << endl;
v.effacer (v.begin() + 1);
pour (entier i = 0; i < v.size(); i++) {
cout << v[i] << " " ;
}
Production:
La taille du vecteur donné 6
Le vecteur n'est pas vide
L'élément en première position est 23
L'élément à la dernière position est 5
L'élément à la position donnée est 10
23 12 56 10 5
File d'attente
Dans la structure de données de file d'attente, les éléments sont insérés à l'arrière et supprimés à l'avant. Par conséquent, il suit l'approche FIFO ("premier entré, premier sorti").
Syntaxe:
#inclure
file d'attente Nom de variable;
Voici quelques méthodes de file d'attente importantes:
- pousser (valeur): Cette méthode ajoute des éléments à la file d'attente.
- pop(): Cette méthode supprime le premier élément de la file d'attente.
- Taille(): Cette méthode renvoie la taille de la file d'attente.
- de face(): Cette méthode renvoie le premier élément de la file d'attente.
- dos(): Cette méthode renvoie le dernier élément de la file d'attente.
file d'attente < entier > q;
q.poussez (30) ;
q.poussez (40);
q.poussez (50);
q.poussez (60) ;
q.poussez (70) ;
cout << "Le premier élément est " << q.front() << endl;
cout << "Le dernier élément est " << q.back() << endl;
cout << "La taille de la file d'attente est " << q.size() << endl;
q.pop();
cout << "Impression de tous les éléments de la file d'attente" << endl;
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}
Production:
Le premier élément est 30
Le dernier élément est 70
La taille de la file d'attente est de 5
Impression de tous les éléments de la Queue
40 50 60 70
Empiler
Les conteneurs empilables fonctionnent selon la méthode LIFO. LIFO signifie "dernier entré, premier sorti". Les données sont poussées et extraites de la même extrémité.
Syntaxe:
#inclure
empiler Nom de variable;
Voici quelques méthodes de pile importantes:
- pousser (valeur): Cette méthode pousse l'élément dans la pile.
- pop(): Cette méthode supprime l'élément supérieur de la pile.
- Haut(): Cette méthode renvoie la valeur du dernier élément entré dans la pile.
- Taille(): Cette méthode renvoie la taille de la pile.
- vider(): Cette méthode vérifie si la pile est vide ou non.
pile < entier > s;
s.push (30);
s.push (40);
s.push (50);
s.push (60);
cout << "Le sommet de la pile contient " << s.top() << endl;
s.pop();
cout << "Le sommet de la pile après l'exécution de l'opération pop: " << s.top() << endl;
cout << "Impression de tous les éléments de la pile" << endl;
while (!s.empty()) {
cout << s.top() << " ";
s.pop();
}
Production:
Le sommet de la pile contient 60
Le sommet de la pile après l'exécution de l'opération pop: 50
Impression de tous les éléments de la pile
50 40 30
Ensemble
Les conteneurs d'ensembles sont utilisés pour contenir des valeurs uniques, et la valeur de l'élément ne peut pas être modifiée une fois qu'il est inséré dans l'ensemble. Tous les éléments de l'ensemble sont stockés de manière triée. Le conteneur de l'ensemble est similaire au définir la structure des données en Python.
Syntaxe:
#inclure
ensemble Nom de variable;
Voici quelques méthodes d'ensemble importantes:
- insérer (valeur): Cette méthode insère des éléments dans l'ensemble.
- commencer(): Cette méthode renvoie l'itérateur au premier élément de l'ensemble.
- finir(): Cette méthode renvoie l'itérateur au dernier élément de l'ensemble.
- Taille(): Cette méthode renvoie la taille de l'ensemble.
- vider(): Cette méthode vérifie si l'ensemble est vide ou non.
- trouver (valeur): Cette méthode renvoie l'itérateur à l'élément passé en paramètre. Si l'élément n'est pas trouvé, cette fonction renvoie l'itérateur à la fin de l'ensemble.
- effacer (valeur): Cette méthode a supprimé l'élément spécifié de l'ensemble.
définir < entier > s;
à l'insert (20) ;
à l'insert (30) ;
à l'insert (40);
à insérer (50);
à insérer (60);
à insérer (60);
à insérer (60);
auto i = s.begin();
cout << "Élément à la première position" << * i << endl;
cout << "La taille de l'ensemble" << s.size() << endl;
à.trouver (20) != à.fin()? cout << "Élément trouvé" << endl: cout << "Élément non trouvé" << endl;
effacer (30) ;
cout << "Impression de tous les éléments" << endl;
pour (auto i = s.begin(); i != s.end(); i++) {
cout << * je << " ";
}
Production:
Élément en première position 20
La taille de l'ensemble 5
Élément trouvé
Impression de tous les éléments
20 40 50 60
C++ n'a pas besoin d'être difficile
Comme toutes les autres compétences, la pratique est essentielle pour tirer le meilleur parti de la STL. Ces conteneurs et algorithmes peuvent vous faire gagner beaucoup de temps et sont faciles à utiliser. Commencez par pratiquer les exemples ci-dessus et vous finirez par l'utiliser également dans vos propres projets.
Cependant, si c'est la première fois que vous apprenez le C++, commencez par apprendre les bases avant de commencer à comprendre la STL.
Vous voulez apprendre le C++? Voici les meilleurs sites Web et cours en ligne sur C++ pour les programmeurs débutants et expérimentés.
Lire la suite
- Programmation
- Tutoriels de codage
- Programmation fonctionnelle
Nitin est un développeur de logiciels passionné et un étudiant en génie informatique qui développe des applications Web à l'aide des technologies JavaScript. Il travaille en tant que développeur Web indépendant et aime écrire pour Linux et la programmation pendant son temps libre.
Abonnez-vous à notre newsletter
Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives !
Un pas de plus…!
Veuillez confirmer votre adresse e-mail dans l'e-mail que nous venons de vous envoyer.