std::find, std::find_if, std::find_if_not
Definido en el archivo de encabezado <algorithm>
|
||
(1) | ||
template< class InputIt, class T > InputIt find( InputIt primero, InputIt ultimo, const T& valor ); |
(hasta C++20) | |
template< class InputIt, class T > constexpr InputIt find( InputIt primero, InputIt ultimo, const T& valor ); |
(desde C++20) | |
template< class ExecutionPolicy, class ForwardIt, class T > ForwardIt find( PoliticaEjecucion&& politica, ForwardIt primero, ForwardIt ultimo, |
(2) | (desde C++17) |
(3) | ||
template< class InputIt, class PredicadoUnario > InputIt find_if( InputIt primero, InputIt ultimo, |
(hasta C++20) | |
template< class InputIt, class PredicadoUnario > constexpr InputIt find_if( InputIt primero, InputIt ultimo, |
(desde C++20) | |
template< class PoliticaEjecucion, class ForwardIt, class PredicadoUnario > ForwardIt find_if( PoliticaEjecucion&& politica, ForwardIt primero, ForwardIt last, |
(4) | (desde C++17) |
(5) | ||
template< class InputIt, class PredicadoUnario > InputIt find_if_not( InputIt primero, InputIt last, |
(desde C++11) (hasta C++20) |
|
template< class InputIt, class PredicadoUnario > constexpr InputIt find_if_not( InputIt primero, InputIt last, |
(desde C++20) | |
template< class PoliticaEjecucion, class ForwardIt, class PredicadoUnario > ForwardIt find_if_not( PoliticaEjecucion&& politica, ForwardIt primero, ForwardIt last, |
(6) | (desde C++17) |
Devuelve el primero elemento en el rango [primero, ultimo)
el cual satisface criterios específicos:
find
busca un elemento igual a valor
find_if
busca un elemento para el cual el predicado p
devuelve truefind_if_not
busca un elemento para el cual el predicado q
devuelve falsepolitica
. Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_execution_policy_v<std::decay_t<PoliticaEjecucion>> is trueContenido |
[editar] Parametros
primero, ultimo | - | el rango de elementos a examinar |
valor | - | valor al que comparar los elementos |
policy | - | La política de ejecución a usar. Véase política de ejecución para más detalles. |
p | - | Predicado unario que devuelve true para el elemento requerido. La signatura de la función predicado debe ser equivalente a: bool pred(const Type &a); La forma no necesita tener const &, pero la función no debe modificar el objeto que se ha pasado. |
q | - | Predicado unario que devuelve true para el elemento requerido. La signatura de la función predicado debe ser equivalente a: bool pred(const Type &a); La forma no necesita tener const &, pero la función no debe modificar el objeto que se ha pasado. |
Requerimientos de tipo | ||
-InputIt debe reunir los requerimientos de InputIterator .
| ||
-ForwardIt debe reunir los requerimientos de ForwardIterator .
| ||
-PredicadoUnario debe reunir los requerimientos de Predicate .
|
[editar] Valor devuelto
Iterador al primer elemento que satisface la condición o ultimo
si tal elemento no se encuentra.
[editar] Complejidad
Como mucho ultimo
- primero
aplicaciones del predicado
[editar] Excepciones
Las sobrecargas con un parámetro de plantilla llamado ExecutionPolicy
(política de ejecución) reportan errores tales que:
- Si la ejecución de una función invocada como parte del algoritmo lanza una excepción y la política de ejecución es una de las tres políticas estándar, se llama a std::terminate. Para cualquier otra política de ejecución, el comportamiento está definido por la implementación.
- Si el algoritmo falla al asignar memoria, se lanza std::bad_alloc.
[editar] Posibles implementaciones
Primera versión |
---|
template<class InputIt, class T> InputIt find(InputIt primero, InputIt ultimo, const T& value) { for (; primero != ultimo; ++primero) { if (*primero == value) { return primero; } } return ultimo; } |
Segunda versión |
template<class InputIt, class PredicadoUnario> InputIt find_if(InputIt primero, InputIt ultimo, PredicadoUnario p) { for (; primero != ultimo; ++primero) { if (p(*primero)) { return primero; } } return ultimo; } |
Tercera versión |
template<class InputIt, class PredicadoUnario> InputIt find_if_not(InputIt primero, InputIt ultimo, PredicadoUnario q) { for (; primero != ultimo; ++primero) { if (!q(*primero)) { return primero; } } return ultimo; } |
Si no dispone de C++11, un equivalente a std::find_if_not es usar std::find_if con un predicado negado.
template<class InputIt, class PredicadoUnario> InputIt find_if_not(InputIt primero, InputIt ultimo, PredicadoUnario q) { return std::find_if(primero, ultimo, std::not1(q)); } |
[editar] Ejemplo
El siguiente ejemplo encuentra un entero en un vector de enteros.
#include <iostream> #include <algorithm> #include <vector> #include <iterator> int main() { int n1 = 3; int n2 = 5; std::vector<int> v{0, 1, 2, 3, 4}; auto resultado1 = std::find(std::begin(v), std::end(v), n1); auto resultado2 = std::find(std::begin(v), std::end(v), n2); if (resultado1 != std::end(v)) { std::cout << "v contiene: " << n1 << '\n'; } else { std::cout << "v no contiene: " << n1 << '\n'; } if (resultado2 != std::end(v)) { std::cout << "v contiene: " << n2 << '\n'; } else { std::cout << "v no contiene: " << n2 << '\n'; } }
Salida:
v contiene: 3 v no contiene: 5
[editar] Ver también
encuentra dos elementos contiguos idénticos (o que satisfacen un predicado) (plantilla de función) | |
encuentra la última secuencia de elementos en un cierto rango Original: finds the last sequence of elements in a certain range The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de función) | |
busca cualquiera de los elementos de un set (plantilla de función) | |
encuentra la primera posición donde dos rangos difieren (plantilla de función) | |
busca a un rango de elementos (plantilla de función) |