Bootstrap

std::inner_product实现两个数组对应位置的乘积求和

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

参数解释:

  1. first1, last1:第一个序列的起始和结束迭代器。
  2. first2:第二个序列的起始迭代器。
  3. init:结果的初始值。累加的起始值,通常为 0。
  4. BinaryOperation1BinaryOperation2(可选):自定义的二元运算符,用于乘法和加法的替代操作。

基本使用

假设你有两个相同大小的容器,你想计算它们对应位置元素的乘积之和,使用 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 将遍历 vec1vec2,对于每一对对应元素,计算它们的乘积,并将乘积累加到 0 上。
;