Skip to content
Related Articles

Related Articles

numeric header in C++ STL | Set 2 (adjacent_difference(), inner_product() and iota())

View Discussion
Improve Article
Save Article
  • Difficulty Level : Medium
  • Last Updated : 17 Jul, 2022
View Discussion
Improve Article
Save Article

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;
}

Output

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;
}

Output

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;
}

Output

 a :  100 101 102 103 104 105 106

This article is contributed by Abhinav Tiwari. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!