Algoritmi modificanti: transform, copy_if, replace
Trasformi, filtri e sostituisca gli elementi con gli algoritmi standard
Algoritmi modificanti: transform, copy_if, replace è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 2 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.
Algoritmi modificanti
Questi algoritmi scrivono in un intervallo di output, direttamente nell'intervallo originale oppure tramite un iteratore di destinazione.
std::copy
Copia un intervallo in un altro. L'intervallo di output deve essere abbastanza grande oppure è necessario fornire un inserter.
#include <algorithm>
#include <iterator>
std::vector<int> src = {1, 2, 3};
std::vector<int> dst;
std::copy(src.begin(), src.end(), std::back_inserter(dst));std::copy_if
Copia gli elementi che soddisfano un predicato.
std::vector<int> evens;
std::copy_if(src.begin(), src.end(),
std::back_inserter(evens),
[](int x) { return x % 2 == 0; });std::transform
Applica una funzione a ogni elemento e scrive il risultato. È simile a map in altri linguaggi.
std::vector<int> v = {1, 2, 3};
std::vector<int> sq;
std::transform(v.begin(), v.end(),
std::back_inserter(sq),
[](int x) { return x * x; });
// sq is {1, 4, 9}std::transform su due intervalli
Combina due intervalli di input con una funzione binaria.
std::vector<int> a = {1, 2, 3};
std::vector<int> b = {10, 20, 30};
std::vector<int> sum;
std::transform(a.begin(), a.end(), b.begin(),
std::back_inserter(sum), std::plus<int>{});
// sum is {11, 22, 33}std::replace e std::replace_if
Sostituiscono sul posto gli elementi uguali a un valore o che soddisfano un predicato.
std::vector<int> v = {1, 2, 3, 2};
std::replace(v.begin(), v.end(), 2, 99);
// v is {1, 99, 3, 99}std::fill
Imposta ogni elemento di un intervallo su un determinato valore.
std::vector<int> v(5);
std::fill(v.begin(), v.end(), 42);
// v is {42, 42, 42, 42, 42}std::generate
Imposta ogni elemento sul risultato della chiamata a una funzione. È utile per generare sequenze.
std::vector<int> v(5);
int n = 0;
std::generate(v.begin(), v.end(), [&]() { return n++; });
// v is {0, 1, 2, 3, 4}std::iota
Da <numeric> — riempie un range con valori sequenziali crescenti.
#include <numeric>
std::vector<int> v(5);
std::iota(v.begin(), v.end(), 10);
// v is {10, 11, 12, 13, 14}std::reverse
Inverte sul posto gli elementi di un range.
std::vector<int> v = {1, 2, 3, 4};
std::reverse(v.begin(), v.end());
// v is {4, 3, 2, 1}std::rotate
Ruota gli elementi in modo che l'elemento in corrispondenza di middle diventi il nuovo primo elemento. Il primo elemento originale viene spostato alla fine della regione ruotata.
Erase-remove con std::remove
remove sposta gli elementi indesiderati in fondo e restituisce un iteratore alla nuova fine logica. Lo combini con erase per ridurre effettivamente le dimensioni.
v.erase(
std::remove(v.begin(), v.end(), 0),
v.end()
);Verifica rapida
Quale algoritmo è più adatto per "applicare una funzione a ogni elemento e creare un nuovo contenitore"?
Riepilogo
Gli algoritmi di modifica scrivono i risultati: copy, copy_if, transform, replace, fill, generate, iota, reverse, rotate e l'idiom erase-remove.
Domande Frequenti
La lezione «Algoritmi modificanti: transform, copy_if, replace» è gratuita?
Sì — il testo completo di «Algoritmi modificanti: transform, copy_if, replace» è 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 «Algoritmi modificanti: transform, copy_if, replace»?
Trasformi, filtri e sostituisca gli elementi con gli algoritmi standard 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 2 di 4.
Quanto tempo richiede la lezione «Algoritmi modificanti: transform, copy_if, replace»?
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
- Algoritmi non modificanti: find, count, all_of
- Algoritmi modificanti: transform, copy_if, replace
- Ordinamento e partizionamento: sort, stable_partition
- Algoritmi numerici: accumulate, reduce, transform_reduce