Librería estándar de C++<functional>
En la librería estándar de C++<functional>El archivo de cabecera proporciona un conjunto de plantillas de funciones que nos permiten usar objetos de función (function objects) como parámetros para pasar a algoritmos, o como valores de retorno de algoritmos. Los objetos de función son aquellos que sobrecarganoperator()de objetos, los cuales pueden ser llamados como funciones normales.
En C++, un objeto de función es una clase especial que sobrecargaoperator()para permitir que los objetos sean llamados como funciones. Esto nos permite pasar comportamientos como objetos, aumentando la flexibilidad y reutilización del código.
Sintaxis
Para usar<functional>las funcionalidades del archivo de cabecera, necesitas incluir este archivo de cabecera en tu programa de C++:
#include <functional>
Objetos de función comunes
<functional>El archivo de cabecera define algunos objetos de función comunes, incluyendo:
std::functionun envoltorio de función polimórfico genérico.std::bindse utiliza para enlazar los parámetros de una función.std::plus、std::minus、std::multiplies、std::divides、std::modulusoperaciones aritméticas básicas.std::equal_to、std::not_equal_to、std::greater、std::less、std::greater_equal、std::less_equaloperaciones de comparación.std::unary_negate、std::binary_negateoperación de negación lógica.std::logical_and、std::logical_or、std::logical_notoperaciones lógicas.
Ejemplo
Usostd::function
std::functiones una clase de plantilla que puede almacenar, invocar y copiar cualquier objeto invocable, como funciones, expresiones lambda u objetos de función.
Ejemplo
#include <functional>
void greet() {
std::cout << "Hello, World!" << std::endl;
}
int main() {
std::function<void()> f = greet; // Usando una función
f(); // Salida: Hello, World!
std::function<void()> lambda = []() {
std::cout << "Hello, Lambda!" << std::endl;
};
lambda(); // Salida: Hello, Lambda!
return 0;
}
Usostd::bind
std::bindnos permite crear un objeto invocable que, al ser invocado, enlaza los parámetros dados a una función u objeto de función.
Ejemplo
#include <functional>
int add(int a, int b) {
return a + b;
}
int main() {
auto bound_add = std::bind(add, 5, std::placeholders::_1);
std::cout << bound_add(10) << std::endl; // Salida: 15
return 0;
}
En este ejemplo,std::placeholders::_1es un marcador de posición que, al llamar abound_addserá reemplazado por el argumento real.
Uso de objetos de función de comparación
Los objetos de función de comparación se pueden usar en algoritmos, como por ejemplostd::sort。
Ejemplo
#include <vector>
#include <algorithm>
#include <functional>
bool compare(int a, int b) {
return a < b;
}
int main() {
std::vector<int> v = {5, 3, 9, 1, 4};
std::sort(v.begin(), v.end(), compare); // Usando una función de comparación personalizada
for (int i : v) {
std::cout << i << " "; // Salida: 1 3 4 5 9
}
std::sort(v.begin(), v.end(), std::less<int>()); // Usando el objeto de función de comparación de la biblioteca estándar
for (int i : v) {
std::cout << i << " "; // Salida: 1 3 4 5 9
}
return 0;
}
<functional>El archivo de cabecera es una parte muy poderosa de la librería estándar de C++. Proporciona una gran variedad de objetos de función y herramientas que nos permiten escribir código más flexible y reutilizable. Mediante el uso de objetos de función, podemos pasar comportamientos como parámetros o almacenarlos en contenedores, logrando así técnicas de programación más avanzadas.