C++ std transform

C++ es uno de los lenguajes de programación más populares y utilizados en el mundo. Con él, se pueden crear programas para diferentes sistemas operativos y dispositivos. Una de las librerías más importantes de C++ es la STL (Standard Template Library), la cual ofrece una amplia variedad de algoritmos que facilitan la programación de aplicaciones.
Dentro de la STL, se encuentra la función `std::transform`, la cual permite aplicar una función a cada elemento dentro de un rango en un contenedor, y guardar los resultados en otro contenedor. Es una herramienta muy útil cuando se necesita hacer operaciones en múltiples elementos de un contenedor de forma eficiente.
A continuación, se describirán diferentes aspectos de esta función para su uso en programación.
Sintaxis
La sintaxis de la función `std::transform` es la siguiente:
template<class InputIt, class OutputIt, class UnaryOperation>
OutputIt transform(InputIt first, InputIt last, OutputIt d_first, UnaryOperation unary_op);
Donde los parámetros son los siguientes:
- `first` y `last`: Iterador que define el rango del vector de entrada.
- `d_first`: Iterador al inicio del vector de salida.
- `unary_op`: Función que toma un elemento del contenedor de entrada y devuelve un elemento que será puesto en el contenedor de salida.
La función `std::transform` devuelve un iterador que apunta al final del contenedor de salida.
Uso
La función `std::transform` puede ser utilizada para diferentes propósitos, como cambiar el valor de un conjunto de elementos en un contenedor, aplicar una función a cada elemento de un contenedor, o crear un nuevo contenedor con los resultados de una operación.
Para utilizarla, se debe definir la función que se aplicará a cada elemento del contenedor de entrada, y los iteradores que definirán el rango en el contenedor de entrada y salida.
A continuación, se presenta un ejemplo para aplicar la función `std::toupper()` a cada carácter de un string y guardar el resultado en otro string:
#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1 = "Hola mundo";
string s2(s1.size(), ' ');// Define un string con el mismo tamano
transform(s1.begin(), s1.end(), s2.begin(), ::toupper);
cout << "Original: " << s1 << endl; cout << "Modificado: " << s2 << endl; return 0; }
La salida del programa será:
Original: Hola mundo
Modificado: HOLA MUNDO
Ejemplos
A continuación, se presentan algunos ejemplos adicionales de cómo utilizar la función `std::transform`:
Ejemplo 1: Sumar dos vectores
Supongamos que se tienen dos vectores de igual tamaño y se desea crear un tercer vector que contenga la suma de los elementos correspondientes de cada vector.
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1 = {1, 2, 3, 4, 5};
vector<int> v2 = {10, 20, 30, 40, 50};
vector<int> v3(v1.size());
transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), plus<>());
for(auto i : v3)
cout << i << " ";
return 0;
}
La salida del programa será:
11 22 33 44 55
Ejemplo 2: Obtener la longitud de una cadena en un vector
Se tiene un vector de string y se quiere obtener la longitud de cada cadena para guardar el resultado en otro vector.
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector<string> v1 = {"Hola", "mundo", "en", "C++"};
vector<int> v2(v1.size());
transform(v1.begin(), v1.end(), v2.begin(), [](string s) { return s.size(); });
for(auto i : v2)
cout << i << " ";
return 0;
}
La salida del programa será:
4 5 2 3
Conclusión
La función `std::transform` es una herramienta poderosa y útil que ayuda a aplicar una función a cada elemento de un rango de un contenedor y guardar los resultados en otro contenedor. Es una buena alternativa para ahorrar tiempo al realizar operaciones con elementos de un contenedor.
Preguntas frecuentes
¿Puedo utilizar diferentes tipos de contenedores como entrada y salida?
Sí, se pueden utilizar diferentes tipos de contenedores como entrada y salida.
¿Es posible modificar los elementos del contenedor de entrada?
Sí, es posible modificar los elementos del contenedor de entrada. Sin embargo, para hacerlo es importante tener en cuenta que la función debe ser diseñada para no causar problemas en la operación del programa.
¿Cómo puedo aplicar una función a un subrango del contenedor de entrada?
Para aplicar una función a un subrango del contenedor de entrada, se deben utilizar los iteradores que definen ese subrango en lugar de los iteradores que definen todo el contenedor.
[nekopost slugs="no-se-puede-llamar-a-la-funcion-del-miembro-sin-error-de-objeto-cpp,matriz-de-matrices-cpp,cpp-lea-el-archivo-csv,error-de-cpp-tipo-incompleto-no-permitido,lista-de-adyacencia-cpp,inicializar-struct-cpp,std-cout-cpp,isalpha-cpp,cin-get-funcion-cpp"]

Deja una respuesta