Introduction à la bibliothèque stand en C++ (STL)
La Standard Template Library (STL) est une collection puissante d'outils en C++ qui simplifient la manipulation des données. Elle regroupe trois éléments principaux :
- Les conteneurs : structures de données comme les vecteurs, listes et maps.
- Les algorithmes : fonctions pour trier, rechercher, ou transformer des données.
- Les itérateurs : outils pour parcourir les éléments d'un conteneur.
Cet article vous guidera à travers les bases de la STL, ses conteneurs courants, et ses algorithmes essentiels pour écrire un code plus propre, efficace et modulaire.
1. Les conteneurs courants dans la STL
Les conteneurs de la STL offrent une abstraction puissante pour stocker et manipuler des collections de données. Voici les principaux conteneurs :
1.1. std::vector
Un vecteur est un tableau dynamique qui peut changer de taille. Il est rapide pour les accès par indice, mais peut être coûteux lors des insertions/suppressions en milieu de tableau.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> nums = {1, 2, 3, 4};
nums.push_back(5); // Ajoute un élément à la fin
nums.pop_back(); // Supprime le dernier élément
for (int num : nums) {
cout << num << " ";
}
return 0;
}
1.2. std::array
Un tableau fixe, plus léger qu’un std::vector mais avec une taille immuable.
#include <iostream>
#include <array>
using namespace std;
int main() {
array<int, 4> nums = {1, 2, 3, 4};
for (int num : nums) {
cout << num << " ";
}
return 0;
}
1.3. std::deque
Une deque (double-ended queue) permet des insertions/suppressions rapides aux deux extrémités.
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> nums = {1, 2, 3};
nums.push_front(0); // Ajoute un élément au début
nums.push_back(4); // Ajoute un élément à la fin
for (int num : nums) {
cout << num << " ";
}
return 0;
}
1.4. std::list
Une liste chaînée est idéale pour les insertions/suppressions fréquentes, mais plus lente pour les accès aléatoires.
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> nums = {1, 2, 3};
nums.push_back(4);
nums.push_front(0);
for (int num : nums) {
cout << num << " ";
}
return 0;
}
1.5. std::set
et std::unordered_set
- std::set : Stocke des éléments uniques, triés automatiquement.
- std::unordered_set : Version non triée, mais plus rapide grâce au hachage.
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> nums = {1, 2, 3, 2}; // Élimine les doublons
for (int num : nums) {
cout << num << " ";
}
return 0;
}
2. Les algorithmes de la STL
La STL propose une large gamme d'algorithmes pour manipuler les conteneurs. Voici quelques exemples utiles :
Vous pouvez avoir accès à toutes la liste des algorithmes de la STL ici.
2.1. Trier un conteneur (std::sort)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> nums = {4, 1, 3, 2};
sort(nums.begin(), nums.end()); // Trie en ordre croissant
for (int num : nums) {
cout << num << " ";
}
return 0;
}
2.2. Rechercher un élément (std::find)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> nums = {1, 2, 3, 4};
auto it = find(nums.begin(), nums.end(), 3);
if (it != nums.end()) {
cout << "Élément trouvé : " << *it << endl;
} else {
cout << "Élément non trouvé." << endl;
}
return 0;
}
3. Les itérateurs
Les itérateurs permettent de parcourir les conteneurs sans dépendre de leur implémentation sous-jacente.
Exemple avec std::vector
:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> nums = {1, 2, 3};
for (vector<int>::iterator it = nums.begin(); it != nums.end(); ++it) {
cout << *it << " ";
}
return 0;
}
4. Exercice pratique
Énoncé :
- Créez un
std::map
pour stocker des paires nom-note. - Implémentez une fonction qui trie les notes par ordre décroissant en utilisant
std::sort
et unstd::vector
. - Affichez les résultats triés.
Conclusion
La STL est un élément incontournable du langage C++ pour manipuler efficacement les données. Grâce à ses conteneurs, algorithmes et itérateurs, elle permet d’écrire un code plus clair et modulaire.
À propos de PointerLab
PointerLab est une ESN spécialisée dans le développement de logiciels C++ et experte sur le framework Qt.
Le nom PointerLab reflète notre maîtrise des concepts complexes en C++ et notre volonté d'innovation. Nous défendons des valeurs d’excellence technique, de transparence et de collaboration horizontale.