std::transform() in C++ STL (Perform an operation on all elements)
Consider the problem of adding contents of two arrays into a third array. It is given that all arrays are of same size.
Following is simple C++ program without transform().
CPP
// A C++ code to add two arrays #include <bits/stdc++.h> using namespace std; int main() { int arr1[] = {1, 2, 3}; int arr2[] = {4, 5, 6}; int n = sizeof (arr1)/ sizeof (arr1[0]); int res[n]; // Code to add two arrays for ( int i=0; i<n; i++) res[i] = arr1[i] + arr2[i]; for ( int i=0; i<3; i++) cout << res[i] << " " ; } |
Output
5 7 9
Time Complexity: O(N) , where N is size of array.
Auxiliary Space: (N)
Using transform function of STL, we can add arrays in single line.
C++
// Using transform() in STL to add two arrays #include <bits/stdc++.h> using namespace std; int main() { int arr1[] = {1, 2, 3}; int arr2[] = {4, 5, 6}; int n = sizeof (arr1)/ sizeof (arr1[0]); int res[n]; // Single line code to add arr1[] and arr2[] and // store result in res[] transform(arr1, arr1+n, arr2, res, plus< int >()); for ( int i=0; i<n; i++) cout << res[i] << " " ; } |
Output
5 7 9
transform() in C++ is used in two forms:
1. Unary Operation : Applies a unary operator on input to convert into output
transform(Iterator inputBegin, Iterator inputEnd, Iterator OutputBegin, unary_operation)
Following is C++ example.
C++
// C++ program to demonstrate working of // transform with unary operator. #include <bits/stdc++.h> using namespace std; int increment( int x) { return (x+1); } int main() { int arr[] = {1, 2, 3, 4, 5}; int n = sizeof (arr)/ sizeof (arr[0]); // Apply increment to all elements of // arr[] and store the modified elements // back in arr[] transform(arr, arr+n, arr, increment); for ( int i=0; i<n; i++) cout << arr[i] << " " ; return 0; } |
Output
2 3 4 5 6
2. Binary Operation: Applies a binary operator on input to convert into output
transform(Iterator inputBegin1, Iterator inputEnd1, Iterator inputBegin2, Iterator OutputBegin, binary_operation)
The example mentioned above for adding two arrays is an example of transform with binary operation.
More examples:
We can use transform to convert a string to upper case (See this)
We can modify above examples for vectors also.
// vect is a vector of integers. transform(vect.begin(), vect.end(), vect.begin(), increment);
Related Topic:
Functors in C++