Fácil C++
Ordenar e encontrar o primeiro par
Enunciado
Dado um vetor de inteiros, ordene-o em ordem crescente e use std::find_if para encontrar o primeiro número par. Imprima o vetor ordenado e o primeiro par encontrado (ou uma mensagem se não houver).
Requisitos
- Use
std::sortpara ordenar o vetor. - Use
std::find_ifcom um lambda que verifica se o número é par. - Imprima o vetor ordenado separado por espaços.
- Imprima o primeiro par ou 'Nenhum par' se não existir.
Código inicial
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> nums = {7, 3, 8, 1, 6, 2};
// TODO: ordene e encontre o primeiro par
return 0;
}
Saída esperada
Ordenado: 1 2 3 6 7 8
Primeiro par: 2
Ver dica
O predicado para par é [](int n) { return n % 2 == 0; }.
Mostrar solução
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> nums = {7, 3, 8, 1, 6, 2};
// Ordena em ordem crescente
std::sort(nums.begin(), nums.end());
std::cout << "Ordenado: ";
for (int n : nums) std::cout << n << ' ';
std::cout << '\n';
// Procura o primeiro número par
auto it = std::find_if(nums.begin(), nums.end(),
[](int n) { return n % 2 == 0; });
if (it != nums.end())
std::cout << "Primeiro par: " << *it << '\n';
else
std::cout << "Nenhum par\n";
return 0;
}
Passo a passo
- Incluímos
<algorithm>para ter acesso astd::sortestd::find_if. std::sort(nums.begin(), nums.end())ordena o vetor em ordem crescente usando o operador<padrão.- Imprimimos o vetor ordenado com um laço
forbaseado em intervalo. std::find_ifrecebe o intervalo e um lambda que retornatruepara números pares.- O iterador
itaponta para o primeiro par encontrado ou paranums.end()se não houver. - Verificamos se
ité diferente deend()e imprimimos o valor ou a mensagem de ausência.
Por que funciona
std::sort reorganiza os elementos no próprio vetor, garantindo que a busca subsequente percorra os números em ordem. std::find_if percorre o intervalo e para no primeiro elemento que satisfaz o predicado, retornando um iterador válido. Essa combinação é eficiente e evita escrever laços manuais com índices.
Erros comuns
- Esquecer de incluir
<algorithm>: o compilador não encontrastd::sortestd::find_if. - Usar
*itsem verificar seit != nums.end(): comportamento indefinido se nenhum par existir. - Escrever o predicado como
n % 2 = 0(atribuição) em vez den % 2 == 0(comparação).
Outra forma de resolver
Se você quisesse apenas verificar a existência de um par, poderia usar std::any_of. Mas para obter o valor, find_if é mais direto.
Saída esperada
Ordenado: 1 2 3 6 7 8
Primeiro par: 2