0Pricing
C++ Academy · Aula

Transformação e modificação: transform, copy_if, replace

Transforme, filtre e substitua elementos com algoritmos padrão

Transformação e modificação: transform, copy_if, replace é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

Algoritmos modificadores

Esses algoritmos escrevem em um intervalo de saída — no próprio local ou por meio de um iterador de destino.

std::copy

Copia um intervalo para outro. O intervalo de saída deve ser grande o bastante ou você deve fornecer um inseridor.

#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 os elementos que correspondem a um predicado.

std::vector<int> evens;
std::copy_if(src.begin(), src.end(),
    std::back_inserter(evens),
    [](int x) { return x % 2 == 0; });

std::transform

Aplica uma função a cada elemento e escreve o resultado. É semelhante ao mapeamento em outras linguagens.

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}

transformação de dois intervalos

Combina dois intervalos de entrada com uma função binária.

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

Substitui no próprio local os elementos iguais a um valor (ou que correspondem a um predicado).

std::vector<int> v = {1, 2, 3, 2};
std::replace(v.begin(), v.end(), 2, 99);
// v is {1, 99, 3, 99}

std::fill

Define todos os elementos de um intervalo como um valor.

std::vector<int> v(5);
std::fill(v.begin(), v.end(), 42);
// v is {42, 42, 42, 42, 42}

std::generate

Define cada elemento como o resultado da chamada de uma função. É útil para gerar sequências.

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

De <numeric> — preenche um intervalo com valores sequencialmente crescentes.

#include <numeric>
std::vector<int> v(5);
std::iota(v.begin(), v.end(), 10);
// v is {10, 11, 12, 13, 14}

std::reverse

Inverta os elementos de um intervalo no próprio intervalo.

std::vector<int> v = {1, 2, 3, 4};
std::reverse(v.begin(), v.end());
// v is {4, 3, 2, 1}

std::rotate

Gire os elementos para que o elemento em middle se torne o novo primeiro. O primeiro elemento original vai para o final da região girada.

Padrão erase-remove com std::remove

remove desloca os elementos indesejados para o final e retorna um iterador para o novo fim lógico. Combine-o com erase para reduzir o tamanho de fato.

v.erase(
    std::remove(v.begin(), v.end(), 0),
    v.end()
);

Verificação rápida

Qual algoritmo é mais adequado para "aplicar uma função a cada elemento e criar um novo contêiner"?

Recapitulação

Os algoritmos de modificação escrevem resultados: copy, copy_if, transform, replace, fill, generate, iota, reverse, rotate e o padrão erase-remove.

Perguntas Frequentes

A aula “Transformação e modificação: transform, copy_if, replace” é grátis?

Sim — o texto completo de “Transformação e modificação: transform, copy_if, replace” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Transformação e modificação: transform, copy_if, replace”?

Transforme, filtre e substitua elementos com algoritmos padrão Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Transformação e modificação: transform, copy_if, replace”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Algoritmos que não modificam: find, count, all_of
  2. Transformação e modificação: transform, copy_if, replace
  3. Ordenação e particionamento: sort, stable_partition
  4. Algoritmos numéricos: accumulate, reduce, transform_reduce
← Voltar para C++ Academy