std::inner_product
是 C++ 标准库中的一个算法函数,它可以用来计算两个序列(容器、数组等)对应位置元素的乘积之和。它不仅可以进行普通的内积计算(乘积求和),还可以支持用户提供的自定义乘法和加法操作。
std::inner_product
定义在 <numeric>
头文件中,其原型如下:
namespace std {
template <typename InputIterator1, typename InputIterator2, typename T>
T inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init);
// 还有一个版本,可以接受自定义的二元运算符
template <typename InputIterator1, typename InputIterator2, typename T,
typename BinaryOperation1, typename BinaryOperation2>
T inner_product(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, T init,
BinaryOperation1 op1, BinaryOperation2 op2);
}
参数解释:
first1, last1
:第一个序列的起始和结束迭代器。first2
:第二个序列的起始迭代器。init
:结果的初始值。累加的起始值,通常为 0。BinaryOperation1
和BinaryOperation2
(可选):自定义的二元运算符,用于乘法和加法的替代操作。
基本使用
假设你有两个相同大小的容器,你想计算它们对应位置元素的乘积之和,使用 std::inner_product
可以非常方便地实现。
示例:计算两个 std::vector
的内积
#include <iostream>
#include <vector>
#include <numeric> // std::inner_product
int main() {
// 示例向量
std::vector<int> vec1 = {1, 2, 3, 4};
std::vector<int> vec2 = {5, 6, 7, 8};
// 使用 std::inner_product 计算内积(对应元素的乘积之和)
int sum = std::inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0);
// 输出结果
std::cout << "The sum of products is: " << sum << std::endl;
return 0;
}
解释:
std::inner_product(vec1.begin(), vec1.end(), vec2.begin(), 0)
:vec1.begin(), vec1.end()
:表示第一个向量的范围。vec2.begin()
:表示第二个向量的起始位置。0
:初始化值,表示初始的累加和为0
。std::inner_product
将遍历vec1
和vec2
,对于每一对对应元素,计算它们的乘积,并将乘积累加到0
上。