verbal tipos sujeto que predicado partes oraciones nucleo nominal ejemplos cual con clases c++ class structure predicate

tipos - ¿Qué es el predicado en C++?



sujeto y predicado (4)

El estándar de C ++ define el Predicate siguiente manera (25/7):

El parámetro Predicado se usa cuando un algoritmo espera un objeto de función que, cuando se aplica al resultado de la anulación de la referencia, el iterador correspondiente devuelve un valor que se puede probar como verdadero. En otras palabras, si un algoritmo toma Predicate pred como argumento y primero como iterador, debería funcionar correctamente en la construcción if (pred(*first)){...} . El objeto de función pred no aplicará ninguna función no constante a través del iterador sin referencia. Este objeto de función puede ser un puntero a función, o un objeto de un tipo con un operador de llamada de función apropiado.

Hay una definición análoga de BinaryPredicate con dos parámetros.

Entonces, en inglés, es una función o un objeto con una sobrecarga de operator() que:

  • Toma un solo parámetro. En el caso de los algoritmos, el tipo de parámetro se puede convertir implícitamente del tipo del iterador no referenciado del algoritmo en cuestión, o es una referencia constante a un tipo de este tipo, o en un impulso puede ser una referencia no constante a la exacta escriba siempre que el iterador no sea un const_iterator.
  • devuelve un valor que puede comprobarse con la verdad en una declaración if (y, por lo tanto, debido a las reglas de lenguaje de C ++, también en un bucle while, etc.).
  • no modifica sus argumentos (al menos, no siempre y cuando el tipo de parámetro sea const-correcto ...)

Además, dado que muchos algoritmos no especifican el orden exacto de las operaciones que realizan, es posible que obtenga un comportamiento impredecible si su predicado no es consistente, es decir, si el resultado depende de algo distinto al valor de entrada que puede cambiar entre llamadas .

Además de los algoritmos, el negador lógico not1 en <functional> toma un parámetro de plantilla de Predicate . En ese caso, hay un requisito adicional (20.3 / 5):

Para permitir que los adaptadores y otros componentes manipulen objetos de función que toman uno o dos argumentos, se requiere que los objetos de función proporcionen typedefs argument_type y result_type para objetos de función que tomen un argumento y first_argument_type, second_argument_type y result_type para objetos de función que tomen dos argumentos .

¿Puedes dar algún ejemplo o un enlace a un tema?


El predicado es una función de C ++ que devuelve un valor booleano o una instancia de objeto que tiene un miembro de operador bool (). El predicado unario toma un documento agrícola, binario - dos, etc. Ejemplos de preguntas que los predicados pueden responder para un algoritmo en particular son:

  • ¿Es este elemento lo que estamos buscando?
  • ¿El primero de los dos argumentos ordenados primero en nuestro pedido?
  • ¿Son los dos argumentos iguales?

Casi todos los algoritmos STL toman el predicado como último argumento.

Puede construir nuevos predicados utilizando clases estándar, propias y de elaboración de predicados ( aquí hay una buena referencia ).


No es específico de C ++ (o incluso de lenguajes de computadora). En la gramática del lenguaje natural, en una declaración como la puerta está abierta , la parte abierta es el predicado y es verdadero o falso, así que digamos que tenía una clase cGate , con una función miembro bool cGate::isOpen() , como Una función sería un predicado.

Esencialmente, si la función hace una pregunta sobre el estado o valor del objeto y el resultado es verdadero o falso, entonces es un predicado.


Un predicado es simplemente una función que devuelve verdadero o falso dependiendo de si sus entradas satisfacen alguna condición. En general, una función predicada debe ser pura ; siempre debe devolver el mismo resultado cuando se le da la misma entrada (por lo tanto, bool isDateInPast(Date &date) sería un mal predicado).

A menudo se usan, por ejemplo, como devoluciones de llamada para rutinas de clasificación STL (es decir, "¿ se ingresa a entrada menor que la entrada b ? ").