Introduction à la STL (Standard Template Library) en C++

Introduction à la STL (Standard Template Library) en C++

Amine Abidi - Lead Software Engineer C++/Qt - Associé PointerLab

Publié par Amine Abidi - Lead Software Engineer C++/Qt - Associé PointerLab

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é :

  1. Créez un std::map pour stocker des paires nom-note.
  2. Implémentez une fonction qui trie les notes par ordre décroissant en utilisant std::sort et un std::vector.
  3. 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.

Rejoignez la communauté C++ France sur Discord !

Développez votre réseau et boostez votre carrière avec la communauté C++ France