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
- Algoritmos que não modificam: find, count, all_of
- Transformação e modificação: transform, copy_if, replace
- Ordenação e particionamento: sort, stable_partition
- Algoritmos numéricos: accumulate, reduce, transform_reduce