Menu
Coddy logo textTech

Panoramica e filosofia della STL

Fa parte della sezione Programmazione orientata agli oggetti del percorso C++ di Coddy. Lezione 70 di 104.

La Standard Template Library (STL) è una raccolta di classi e funzioni basate su template che forniscono strutture dati e algoritmi comuni. Basata sui concetti di template che hai imparato, la STL incarna una potente filosofia di progettazione: separare l'archiviazione dei dati dalla loro manipolazione.

La STL è organizzata attorno a tre componenti fondamentali che collaborano:

ComponenteScopoEsempi
ContenitoriMemorizzano raccolte di oggettivector, map, set
IteratoriForniscono accesso agli elementi dei contenitoriInput, output, accesso casuale
AlgoritmiEseguono operazioni sui datisort, find, transform

L'intuizione chiave è che gli algoritmi non conoscono direttamente i contenitori: lavorano tramite iteratori. Ciò significa che un singolo algoritmo sort funziona con vettori, array e qualsiasi contenitore che fornisca il tipo di iteratore corretto:

#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 << " ";
    }
    // Risultato: 1 2 5 8 9
}

Questa separazione significa che puoi combinare liberamente: usa qualsiasi algoritmo con qualsiasi contenitore compatibile senza scrivere nuovo codice. La STL fornisce implementazioni collaudate e ottimizzate, così puoi concentrarti sulla risoluzione dei problemi invece di reinventare strutture dati comuni.

challenge icon

Sfida

Facile

Costruiamo un semplice sistema di elaborazione dei dati che dimostri la filosofia della STL di separare contenitori, iteratori e algoritmi. Creerai un modulo di utilità che funziona con i componenti della STL e un programma principale che mostra come questi elementi interagiscono.

Creerai due file:

  • DataProcessor.h: definisci funzioni di utilità che operano sui contenitori STL tramite iteratori, dimostrando la filosofia di progettazione della STL.

    Crea una funzione chiamata printVector che accetta un std::vector<int>& e stampa tutti gli elementi separati da spazi, seguiti da una nuova riga. Usa gli iteratori (begin() e end()) per attraversare il contenitore.

    Crea una funzione chiamata sortAndPrint che accetta un std::vector<int>&, lo ordina usando std::sort, quindi stampa gli elementi ordinati separati da spazi, seguiti da una nuova riga.

    Crea una funzione chiamata findElement che accetta un std::vector<int>& e un valore int da cercare. Usa std::find per individuare l'elemento. Se viene trovato, stampa Found: <value>. Se non viene trovato, stampa Not found: <value>.

    Crea una funzione chiamata getSum che accetta un std::vector<int>& e restituisce la somma di tutti gli elementi. Per farlo puoi usare un semplice ciclo con gli iteratori.

  • main.cpp: leggi gli input e mostra come interagiscono i componenti della STL.

    Leggi cinque input (ciascuno su una riga separata):

    1. Primo intero
    2. Secondo intero
    3. Terzo intero
    4. Quarto intero
    5. Un valore da cercare

    Crea un std::vector<int> e aggiungi i primi quattro interi. Poi dimostra la filosofia della STL:

    1. Stampa Original: e poi chiama printVector
    2. Stampa Sorted: e poi chiama sortAndPrint
    3. Chiama findElement con il valore da cercare
    4. Stampa Sum: <result> usando getSum

Ad esempio, con gli input 5, 2, 8, 1 e 8:

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

Con gli input 10, 30, 20, 40 e 15:

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

Nota come le tue funzioni operano sul vettore tramite iteratori e come std::sort e std::find funzionano con qualsiasi contenitore che fornisca il tipo di iteratore corretto. Questa è la potenza del design della STL: gli algoritmi sono disaccoppiati dai contenitori e collegati solo tramite iteratori.

Provalo tu

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

using namespace std;

int main() {
    // Leggi cinque numeri interi dall'input
    int num1, num2, num3, num4, searchValue;
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> num4;
    cin >> searchValue;
    
    // TODO: Crea un vector e aggiungici i primi quattro numeri interi
    
    // TODO: Stampa "Original: " e chiama printVector
    
    // TODO: Stampa "Sorted: " e chiama sortAndPrint
    
    // TODO: Chiama findElement con il valore da cercare
    
    // TODO: Stampa "Sum: " seguito dal risultato di getSum
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C++ online