
- C++ Library - Home
- C++ Library - <fstream>
- C++ Library - <iomanip>
- C++ Library - <ios>
- C++ Library - <iosfwd>
- C++ Library - <iostream>
- C++ Library - <istream>
- C++ Library - <ostream>
- C++ Library - <sstream>
- C++ Library - <streambuf>
- C++ Library - <atomic>
- C++ Library - <complex>
- C++ Library - <exception>
- C++ Library - <functional>
- C++ Library - <limits>
- C++ Library - <locale>
- C++ Library - <memory>
- C++ Library - <new>
- C++ Library - <numeric>
- C++ Library - <regex>
- C++ Library - <stdexcept>
- C++ Library - <string>
- C++ Library - <thread>
- C++ Library - <tuple>
- C++ Library - <typeinfo>
- C++ Library - <utility>
- C++ Library - <valarray>
- The C++ STL Library
- C++ Library - <array>
- C++ Library - <bitset>
- C++ Library - <deque>
- C++ Library - <forward_list>
- C++ Library - <list>
- C++ Library - <map>
- C++ Library - <multimap>
- C++ Library - <queue>
- C++ Library - <priority_queue>
- C++ Library - <set>
- C++ Library - <stack>
- C++ Library - <unordered_map>
- C++ Library - <unordered_set>
- C++ Library - <vector>
- C++ Library - <algorithm>
- C++ Library - <iterator>
- The C++ Advanced Library
- C++ Library - <any>
- C++ Library - <barrier>
- C++ Library - <bit>
- C++ Library - <chrono>
- C++ Library - <cinttypes>
- C++ Library - <clocale>
- C++ Library - <condition_variable>
- C++ Library - <coroutine>
- C++ Library - <cstdlib>
- C++ Library - <cstring>
- C++ Library - <cuchar>
- C++ Library - <charconv>
- C++ Library - <cfenv>
- C++ Library - <cmath>
- C++ Library - <ccomplex>
- C++ Library - <expected>
- C++ Library - <format>
- C++ Library - <future>
- C++ Library - <flat_set>
- C++ Library - <flat_map>
- C++ Library - <filesystem>
- C++ Library - <generator>
- C++ Library - <initializer_list>
- C++ Library - <latch>
- C++ Library - <memory_resource>
- C++ Library - <mutex>
- C++ Library - <mdspan>
- C++ Library - <optional>
- C++ Library - <print>
- C++ Library - <ratio>
- C++ Library - <scoped_allocator>
- C++ Library - <semaphore>
- C++ Library - <source_location>
- C++ Library - <span>
- C++ Library - <spanstream>
- C++ Library - <stacktrace>
- C++ Library - <stop_token>
- C++ Library - <syncstream>
- C++ Library - <system_error>
- C++ Library - <string_view>
- C++ Library - <stdatomic>
- C++ Library - <variant>
- C++ STL Library Cheat Sheet
- C++ STL - Cheat Sheet
- C++ Programming Resources
- C++ Programming Tutorial
- C++ Useful Resources
- C++ Discussion
C++ Numeric::inner_product() function
The C++ std::numeric::inner_product() function is used to return the inner product (dot product) of two ranges. It takes two ranges and return the sum of the product of the corresponding elements. It also accepts an initial value and custom binary operations for addition and multiplication.
Syntax
Following is the syntax for std::numeric::inner_product() function.
inner_product (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init); or inner_product (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2);
Parameters
- first1, last1 − It indicates the iterators to the initial and final positions in a sequence.
- init − It is an initial value for the accumulator.
- binary_op1,binary_op2 − It is binary operation.
Return Value
It returns the result of accumulating init and the products of all the pairs of elements in the ranges starting at first1 and first2.
Exceptions
It throws if any of the operations on the elements or iterators throws.
Data races
The elements in the range [first1,last1) are accessed.
Example 1
In the following example, we are going to consider the basic usage of the inner_product() function.
#include <iostream> #include <numeric> #include <vector> int main() { std::vector < int > x = {1,2}; std::vector < int > x1 = {3,4}; int y = std::inner_product(x.begin(), x.end(), x1.begin(), 0); std::cout << "Result : " << y << std::endl; return 0; }
Output
Output of the above code is as follows −
Result : 11
Example 2
Consider the following example, where we are going to use the different initial value and observing the output.
#include <iostream> #include <numeric> #include <vector> int main() { std::vector < int > a = {1,3}; std::vector < int > b = {5,7}; int x = std::inner_product(a.begin(), a.end(), b.begin(), 4); std::cout << "Result : " << x << std::endl; return 0; }
Output
If we run the above code it will generate the following output −
Result : 30
Example 3
Let's look at the following example, where we are going to use the custom binary operation.
#include <iostream> #include <numeric> #include <vector> int main() { std::vector < int > x = {2,6}; std::vector < int > y = {4,8}; int a = std::inner_product(x.begin(), x.end(), y.begin(), 10, std::minus < int > (), std::divides < int > ()); std::cout << "Result : " << a << std::endl; return 0; }
Output
Following is the output of the above code −
Result : 10