numeric header in C++ STL | Set 2 (adjacent_difference(), inner_product() and iota())
The numeric header is part of the numeric library in C++ STL. This library consists of basic mathematical functions and types, as well as optimized numeric arrays and support for random number generation. Some of the functions in the numeric header:
- iota
- accumulate
- reduce
- inner_product
- partial_sum etc.
See this article for more reference: accumulate() and partial_sum() in C++ STL : Numeric header
This article explains adjacent_difference(), inner_product(), and iota in the numeric header which can be used during competitive programming to save time and effort.
1) adjacent_difference(): This function assigns the difference between the corresponding elements of an array to another array. It returns the adjacent difference of all the sets of values lying between [ First, last ).
For Example: If a[] represents an element in the provided range [first, last) and b[] represents the result.
b[0] = a[0] b[1] = a[1] – a[0] b[2] = a[2] – a[1] b[3] = a[3] – a[2] b[4] = a[4] – a[3] ... ... ...
Syntax:
adjacent_difference(first, last, b); adjacent_difference(first, last, b, myfun ); adjacent_difference(first, last, b, multiplies() );
Parameters:
- first, last: address of first and last element of range whose elements are to be added
- b: index of array where corresponding partial sum will be stored;
- myfun: a user-defined function for performing any specific task
- multiplies(): a pre-defined function.
CPP
// CPP Program to demonstrate adjacent_difference() #include <functional> #include <iostream> #include <numeric> using namespace std; int myfun( int x, int y) { return x + y; } // Driver Code int main() { int a[] = { 1, 2, 3, 4, 5, 6 }; int b[6]; // using adjacent_difference function adjacent_difference(a, a + 6, b); cout << "\nResult using adjacent_difference: " ; for ( int i = 0; i < 6; i++) std::cout << b[i] << ' ' ; // using adjacent_difference function // user defined function adjacent_difference(a, a + 6, b, myfun); cout << "\nResult using accumulate with user-" "defined function: " ; for ( int i = 0; i < 6; i++) std::cout << b[i] << ' ' ; // using adjacent_difference with pre-defined function adjacent_difference(a, a + 6, b, multiplies< int >()); cout << "\nResult using accumulate with pre-defined " "function: " ; for ( int i = 0; i < 6; i++) std::cout << b[i] << ' ' ; return 0; } |
Result using adjacent_difference: 1 1 1 1 1 1 Result using accumulate with user-defined function: 1 3 5 7 9 11 Result using accumulate with pre-defined function: 1 2 6 12 20 30
2) inner_product(): This function returns the result of the addition of var with the inner products of the pairs formed by the elements of two ranges starting at first1 and first2.
Syntax:
inner_product(first, last, b, var) ; inner_product(a, a+3, b, var, fun, fun1) ; inner_product(a , a+3, b, init, minus (), divides () );
Parameters:
- first, last: address of first and last element of range whose elements are to be added
- b: index of array where corresponding partial sum will be stored;
- fun, fun1: a user-defined function for performing any specific task
- minus(), divides(): pre defined function.
CPP
// CPP Program to demonstrate inner_product() #include <functional> #include <iostream> #include <numeric> using namespace std; int fun( int x, int y) { return x - y; } int fun1( int x, int y) { return x + y; } // Driver Code int main() { int var = 200; int a[] = { 10, 15, 20 }; int b[] = { 1, 3, 5 }; cout << "\nResult using inner_product " ; // inner_product with default method cout << inner_product(a, a + 3, b, var); // inner_product with pre-defined function cout << "\nResult using inner_product with pre-defined " "function: " ; cout << inner_product(a, a + 3, b, var, minus< int >(), divides< int >()); // inner_product with user defined function cout << "\nResult using inner_product with " "user-defined function: " ; cout << inner_product(a, a + 3, b, var, fun, fun1); return 0; } |
Result using inner_product 355 Result using inner_product with pre-defined function: 181 Result using inner_product with user-defined function: 146
3) iota(): This function assigns a value to the elements in the range [first, last ) of the array which is incremented at each step by val++.
Syntax:
iota(first, last,val) ;
Parameters:
- first, last: address of first and last element of range whose elements are to be added
- val: initial value to store, the expression ++value must be well-formed
CPP
// CPP Program to demonstrate iota() #include <iostream> #include <numeric> using namespace std; // Driver Code int main() { int a[7]; // using iota function to store 100, 101, 102,... iota(a, a + 7, 100); cout << " a : " ; for ( int & x : a) cout << ' ' << x; return 0; } |
a : 100 101 102 103 104 105 106