0Pricing
C++ Academy · Lezione

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

  1. Algoritmi non modificanti: find, count, all_of
  2. Algoritmi modificanti: transform, copy_if, replace
  3. Ordinamento e partizionamento: sort, stable_partition
  4. Algoritmi numerici: accumulate, reduce, transform_reduce
← Torna a C++ Academy