Menu
Coddy logo textTech

Présentation et philosophie de la STL

Fait partie de la section Programmation Orientée Objet du Journey C++ de Coddy — leçon 70 sur 104.

La Standard Template Library (STL) est une collection de classes et de fonctions basées sur des modèles (templates) qui fournissent des structures de données et des algorithmes courants. S'appuyant sur les concepts de modèles que vous avez appris, la STL incarne une philosophie de conception puissante : séparer le stockage des données de la manipulation des données.

La STL est organisée autour de trois composants principaux qui fonctionnent ensemble :

ComposantObjectifExemples
ConteneursStocker des collections d'objetsvector, map, set
ItérateursFournir un accès aux éléments du conteneurEntrée, sortie, accès aléatoire
AlgorithmesEffectuer des opérations sur les donnéessort, find, transform

L'idée fondamentale est que les algorithmes ne connaissent pas directement les conteneurs - ils fonctionnent via des itérateurs. Cela signifie qu'un seul algorithme sort fonctionne avec des vecteurs, des tableaux et tout conteneur fournissant le type d'itérateur approprié :

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> nums = {5, 2, 8, 1, 9};
    
    std::sort(nums.begin(), nums.end());
    
    for (int n : nums) {
        std::cout << n << " ";
    }
    // Sortie : 1 2 5 8 9
}

Cette séparation signifie que vous pouvez combiner et assortir : utilisez n'importe quel algorithme avec n'importe quel conteneur compatible sans écrire de nouveau code. La STL fournit des implémentations éprouvées et optimisées afin que vous puissiez vous concentrer sur la résolution de problèmes plutôt que de réinventer des structures de données courantes.

challenge icon

Défi

Facile

Construisons un système simple de traitement de données qui démontre la philosophie de la STL consistant à séparer les conteneurs, les itérateurs et les algorithmes. Vous allez créer un module utilitaire qui fonctionne avec les composants de la STL et un programme principal qui montre comment ces pièces s'assemblent.

Vous allez créer deux fichiers :

  • DataProcessor.h : Définissez des fonctions utilitaires qui travaillent avec des conteneurs STL via des itérateurs, démontrant ainsi la philosophie de conception de la STL.

    Créez une fonction appelée printVector qui prend un std::vector<int>& et affiche tous les éléments séparés par des espaces, suivis d'un saut de ligne. Utilisez des itérateurs (begin() et end()) pour parcourir le conteneur.

    Créez une fonction appelée sortAndPrint qui prend un std::vector<int>&, le trie en utilisant std::sort, puis affiche les éléments triés séparés par des espaces suivis d'un saut de ligne.

    Créez une fonction appelée findElement qui prend un std::vector<int>& et une valeur int à rechercher. Utilisez std::find pour localiser l'élément. S'il est trouvé, affichez Found: <value>. S'il n'est pas trouvé, affichez Not found: <value>.

    Créez une fonction appelée getSum qui prend un std::vector<int>& et retourne la somme de tous les éléments. Vous pouvez utiliser une boucle simple avec des itérateurs pour cela.

  • main.cpp : Lisez les entrées et démontrez comment les composants de la STL fonctionnent ensemble.

    Lisez cinq entrées (chacune sur une ligne séparée) :

    1. Premier entier
    2. Deuxième entier
    3. Troisième entier
    4. Quatrième entier
    5. Une valeur à rechercher

    Créez un std::vector<int> et ajoutez-y les quatre premiers entiers. Ensuite, démontrez la philosophie de la STL en :

    1. Affichant Original: suivi de l'appel à printVector
    2. Affichant Sorted: suivi de l'appel à sortAndPrint
    3. Appelant findElement avec la valeur de recherche
    4. Affichant Sum: <result> en utilisant getSum

Par exemple, avec les entrées 5, 2, 8, 1, et 8 :

Original: 5 2 8 1 
Sorted: 1 2 5 8 
Found: 8
Sum: 16

Avec les entrées 10, 30, 20, 40, et 15 :

Original: 10 30 20 40 
Sorted: 10 20 30 40 
Not found: 15
Sum: 100

Remarquez comment vos fonctions travaillent avec le vecteur via des itérateurs, et comment std::sort et std::find opèrent sur n'importe quel conteneur qui fournit le bon type d'itérateur. C'est la force de la conception de la STL — les algorithmes sont découplés des conteneurs, connectés uniquement par des itérateurs.

Aide-mémoire

La Standard Template Library (STL) est une collection de classes et de fonctions basées sur des modèles (templates) fournissant des structures de données et des algorithmes courants. Elle sépare le stockage des données de leur manipulation.

La STL comporte trois composants principaux :

ComposantObjectifExemples
ConteneursStocker des collections d'objetsvector, map, set
ItérateursFournir un accès aux éléments du conteneurEntrée, sortie, accès aléatoire
AlgorithmesEffectuer des opérations sur les donnéessort, find, transform

Les algorithmes fonctionnent via des itérateurs, et non directement avec les conteneurs. Cela permet à un seul algorithme de fonctionner avec n'importe quel conteneur compatible :

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> nums = {5, 2, 8, 1, 9};
    
    // Trier en utilisant des itérateurs
    std::sort(nums.begin(), nums.end());
    
    // Parcourir en utilisant des itérateurs
    for (int n : nums) {
        std::cout << n << " ";
    }
    // Sortie : 1 2 5 8 9
}

Méthodes d'itérateur courantes :

  • begin() - retourne un itérateur sur le premier élément
  • end() - retourne un itérateur sur la position après le dernier élément

Algorithmes STL courants :

  • std::sort(begin, end) - trie les éléments dans une plage
  • std::find(begin, end, value) - recherche une valeur dans une plage

Essayez vous-même

#include <iostream>
#include <vector>
#include "DataProcessor.h"

using namespace std;

int main() {
    // Lire cinq entiers à partir de l'entrée
    int num1, num2, num3, num4, searchValue;
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> num4;
    cin >> searchValue;
    
    // TODO: Créer un vector et y ajouter les quatre premiers entiers
    
    // TODO: Afficher "Original: " et appeler printVector
    
    // TODO: Afficher "Sorted: " et appeler sortAndPrint
    
    // TODO: Appeler findElement avec la valeur de recherche
    
    // TODO: Afficher "Sum: " suivi du résultat de getSum
    
    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet