C ++ std_function

C ++ std_function

En C ++, STD significa estándar. C ++ puede tener una clase definida a partir de la cual se instancian los objetos. Una función definida normal es como una clase. La llamada de función es como un objeto a la clase de función definida. Una llamada de función, en diferentes momentos, con diferentes argumentos, es como diferentes objetos de función. Ahora, C ++ tiene clases de funciones predefinidas en las que se pueden instanciar oficialmente diferentes objetos de función. También se puede usar un objeto de función, como una llamada de función. Puede ser un argumento de función de devolución de llamada en otra llamada de función. Un objeto de función puede tomar el lugar de un puntero a una función normal.

La función std :: es una declaración de prototipo de función con el nombre, función () en el encabezado, de la biblioteca. Esto significa que, para usar la función std ::, el encabezado o se debe incluir en el programa. La función std :: también es un envoltorio que toma un objeto de función como argumento, para producir otro objeto de función.

Este artículo explica la función C ++ std ::, comenzando con algunas clases de funciones predefinidas.

Contenido del artículo

- Algunas clases de funciones predefinidas

- std :: transformar

- std :: función propiamente

- Conclusión

Algunas clases de funciones predefinidas

El encabezado funcional tiene muchos prototipos de clase de función predefinidos, en las categorías de, reference_wrapper, operaciones aritméticas, comparaciones, clase comparación_three_way, operaciones lógicas, operaciones bit a bit, enlace, envoltorios de funciones polimórficas, búsqueda y plantilla de clase hash.

En la categoría aritmética, dos de los prototipos de la clase de función son:

plantilla estructura negar;
y
plantilla estructura más;

NOTA: Una estructura es una especie de clase. El primero negaría los números en una lista. El segundo agregaría los números correspondientes de dos listas juntas, lo que resulta en una lista de las adiciones.

std :: transformar

Existe la función std :: transform () en la biblioteca de algoritmo. Esta función tomaría el principio y el final de un vector y usaría el objeto de función de negar para negar todos los elementos del vector. El objeto de función Negate es el último argumento de la llamada de función transform (). Un prototipo (sintaxis) es:

plantilla
Transformación de OuttExpr OutterIterator (Inputiterator First1, Inputiterator Last1,
Resultado de la salida, unaryoperation op);

Donde la salida, eliterator es un segundo vector para los números negados resultantes. El OutputIterator también se devuelve.

El siguiente programa muestra el uso de la sintaxis:

#incluir
#incluir
#incluir
#incluir
usando el espacio de nombres STD;
vector vtr1 = 1, 2, 3, 4, 5;
vectorvtrout (5);
int main ()

transformar (VTR1.begin (), vtr1.end (), vtrout.begin (), negar ());
para (int i = 0; icout<cout<regresar 0;

La salida es:

-1 -2 -3 -4 -5

Las directivas incluyen encabezados iostream, algoritmo, funcionales y vectoriales. Se utiliza el espacio de nombres estándar. Los vectores de entrada y salida son del mismo tamaño. La función std :: transform () se usa sin, ya que el elemento de retorno es un argumento de la función de transformación. El bucle imprime los números negados en la salida. Un elemento de retorno para la función de transformación se habría codificado de la siguiente manera:

vtraut.begin () = transform (vtr1.begin (), vtr1.end (), vtrout.Begin (), niega());

En una forma sobrecargada, la función transform () tomaría el principio y el final de un vector. Luego, el comienzo de otro vector, y use el objeto de función A Plus para agregar los números correspondientes de los dos vectores para tener un nuevo vector con las sumas. El objeto de función más, es el último argumento de la llamada de función de transformación, para este propósito. El prototipo (sintaxis) es:

plantillaClase OutputIterator, Binaryperation de clase>
transformación de outputiterator de constexpr (inputIterator1 First1, Inputiterator1 Last1,
InputIterator2 First2, resultado de la salida, binaryperation binary_op);

Donde la salida de la salida es un tercer vector para los números de suma resultantes. También se devuelve el outputiterator, pero esto no tiene que implementarse. Consulte el siguiente programa:

#incluir
#incluir
#incluir
#incluir
usando el espacio de nombres STD;
vector vtr1 = 1, 2, 3, 4, 5;
vector vtr2 = 10, 20, 30, 40, 50;
vectorvtrout (5);
int main ()

transformar (VTR1.begin (), vtr1.end (), vtr2.begin (), vtrout.begin (), plus ());
para (int i = 0; icout<cout<regresar 0;

La salida es:

11 22 33 44 55

Las directivas incluyen encabezados iostream, algoritmo, funcionales y vectoriales. Se utiliza el espacio de nombres estándar. Los dos vectores de entrada y uno de salida son del mismo tamaño. La función std :: transform () se usa sin, ya que el elemento de retorno es un argumento de la función de transformación. El bucle imprime los números sumados en la salida.

std :: función propiamente

Todo lo anterior ha explicado cómo usar un objeto de función, profesionalmente. Es posible que el programador escriba su propia función como la función transform () y use su propio objeto de función que ha escrito.

std :: la función no es un gran problema. Es un envoltorio que tomaría cualquier objeto de función como argumento. Esta sección del artículo ilustra cómo crear un objeto de función simple y tenerlo envuelto en std :: function.

Un objeto de función es un objeto invocable. Un objeto llamable es cualquier objeto que pueda usarse como una función. Un ejemplo de clase de función se muestra en el siguiente código:

#incluir
#incluir
usando el espacio de nombres STD;
struct structfn
int operator () (int a, int b)
int c = a + b;
regreso c;

;
Structfnfn

Esta es la parte superior del programa, que carece solo de la función principal de C ++. Una estructura es como una clase. Este código tiene la definición de una estructura, llamada structfn (equivalente al nombre de clase). La estructura tiene solo un miembro, que es el operador de paréntesis. Un operador es algo una función. Esta función toma dos enteros como argumentos y devuelve otro entero. En realidad devuelve la suma de los dos enteros. El struct, structfn es un tipo de objeto de función.

El objeto instanciado de la estructura, structfn es fn. "Std :: función" en sí, es otro tipo (clase). La última declaración en el código anterior, instancia un objeto de std :: function (donde std :: se omite porque está en "usando el espacio de nombres std"). El nombre del objeto estándar para "std :: función", es F. "F ()" es un constructor de objetos. En este caso, su único argumento es FN, que es un objeto de la clase de función, structfn. Esta última declaración envuelve el objeto de función.

El operador (función) de la clase de función (struct) tiene dos argumentos de tipos int e int. Devuelve otro int. Estas características de la firma se pueden representar como: int (int, int). Por eso, la especialización de la plantilla, de la construcción de funciones, es .

La sintaxis para el constructor de funciones, utilizado anteriormente, es:

plantilla función de clase;

El resto del programa es la función C ++ Main (). Es:

int main ()

int z = f (2, 3);
cout << z << endl;
regresar 0;

La salida es 5. F (2,3) se usó en lugar de FN (2,3).

La ventaja de la función std :: es que puede tomar cualquier objeto de función, una vez que se conocen los argumentos y el tipo de retorno, de la función tomada.

El objeto de función anterior se puede modificar, que se utilizará como una devolución de llamada de función Plus, en la llamada de función de transformación.

Conclusión

La función std :: es del encabezado funcional, que debe incluirse en el programa para que se use. Envuelve un objeto de función. El objeto de función debe ser su argumento (de la construcción de funciones std ::). Un objeto de función es un objeto invocable. Un objeto llamable es cualquier objeto que pueda usarse como una función. La ventaja de la función std :: es que puede tomar cualquier función, una vez que se conocen los argumentos y el tipo de retorno, de la función tomada.