find y count en C++
Tres preguntas sobre un vector, cada una resuelta con una llamada a un algoritmo en vez de un bucle a mano.
#include <algorithm>
#include <vector>
bool found_enough(const std::vector<int>& v, int target) {
auto hit = std::ranges::find(v, target); // iterator, or end()
auto zeros = std::ranges::count(v, 0);
auto evens = std::ranges::count_if(v, [](int x) { return x % 2 == 0; });
return hit != v.end() && zeros == 0 && evens >= 2;
}
Cómo funciona
std::ranges::finddevuelve un iterador a la primera coincidencia, ov.end()si no hay ninguna.std::ranges::countcuenta coincidencias exactas; aquí verifica que ningún elemento sea0.std::ranges::count_iftoma una lambda y cuenta los pares; las tres respuestas se juntan en unbool.
Palabras clave y builtins usados aquí
autoboolconstintreturn
El intento, en números
- Líneas
- 9
- Caracteres a escribir
- 327
- Tokens
- 111
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 89 segundos.
Paso 3 de 3 en Algoritmos; paso 15 de 27 en Fundamentos del lenguaje.