0Pricing
C++ Academy · Lezione

Introduzione alla libreria Ranges di C++20

Usi gli algoritmi std::ranges che accettano intervalli invece di coppie di iteratori

Introduzione alla libreria Ranges di C++20 è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Perché usare i range?

La STL tradizionale accetta coppie di iteratori (v.begin(), v.end()). I range di C++20 accettano un singolo valore range e aggiungono la componibilità.

Inclusione dei range

Includa <ranges>. Gli spazi dei nomi sono std::ranges per gli algoritmi e std::views per le view lazy.

#include <ranges>
#include <algorithm>

Algoritmi sui range

Ogni algoritmo standard ha una controparte per i range che accetta un range invece di due iteratori.

std::vector<int> v = {3, 1, 4, 1, 5};
std::ranges::sort(v);             // sort the whole range
auto it = std::ranges::find(v, 4);

Funzioni di proiezione

Gli algoritmi sui range accettano una proiezione facoltativa: una funzione applicata a ogni elemento prima del confronto. Evita di scrivere comparatori personalizzati.

struct Person { std::string name; int age; };
std::vector<Person> people;
std::ranges::sort(people, {}, &Person::age);
// sort by age, default comparison

Che cos'è un range?

Un range è qualsiasi oggetto che supporti begin() e end(). Include contenitori, array e, in C++20, qualsiasi tipo personalizzato che esponga un sentinel.

Sentinel

C++20 generalizza end() in un sentinel: non deve necessariamente essere dello stesso tipo dell'iteratore. È utile per gli stream di input e i range infiniti.

View: pipeline di range lazy

Una view è un range non proprietario che produce gli elementi su richiesta. Le componga con l'operatore pipe |.

auto squares = v
    | std::views::filter([](int x) { return x % 2 == 0; })
    | std::views::transform([](int x) { return x * x; });

for (int x : squares) std::cout << x << " ";

Valutazione lazy

Le view non allocano memoria e non vengono eseguite finché non si esegue l'iterazione. filter | transform | take(5) produce solo i primi 5 valori trasformati, niente di più.

Range in prestito e durata di vita

Le view prendono in prestito il range sorgente. Se la sorgente viene distrutta, la view diventa pendente. Presti attenzione alle view su temporanei, anche se C++20 ha aggiunto alcune protezioni.

Eager e lazy

Gli algoritmi producono i risultati eager (li calcolano subito). Le view sono lazy (calcolano durante l'iterazione). Scelga in base alla necessità o meno di materializzare il risultato.

Prestazioni

Le pipeline lazy evitano i contenitori intermedi. Spesso il compilatore ottimizza le pipeline come se fossero un unico ciclo. Verifichi con godbolt.

Percorso di migrazione

Se non può usare C++20, librerie come range-v3 di Eric Niebler forniscono lo stesso modello in C++14/17. Vale la pena impararlo oggi per semplificare la migrazione.

Verifica rapida

Qual è il principale vantaggio dei range di C++20 rispetto allo stile STL basato su coppie di iteratori?

Riepilogo

I range di C++20 modernizzano gli algoritmi della STL: si passa un singolo range, si usano le proiezioni e si costruiscono pipeline lazy con le view. L'operatore pipe combina filtri, trasformazioni e operazioni take in un codice chiaro e dichiarativo.

Domande Frequenti

La lezione «Introduzione alla libreria Ranges di C++20» è gratuita?

Sì — il testo completo di «Introduzione alla libreria Ranges di C++20» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «Introduzione alla libreria Ranges di C++20»?

Usi gli algoritmi std::ranges che accettano intervalli invece di coppie di iteratori Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Introduzione alla libreria Ranges di C++20»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Categorie di iteratori: input, forward, bidirectional, random
  2. Pattern comuni per gli iteratori: begin, end, advance
  3. Introduzione alla libreria Ranges di C++20
  4. Adattatori di intervalli: views::filter, transform, take
← Torna a C++ Academy