📜  C++中的std :: inner_product(1)

📅  最后修改于: 2023-12-03 15:14:02.874000             🧑  作者: Mango

C++中的std::inner_product

在C++中, std::inner_product 是一个函数模板,用于计算两个迭代器范围内元素的乘积总和,并加上初始值,因此它可以计算内积。

以下是 std::inner_product 函数模板的语法:

template< class InputIt1, class InputIt2, class T >
T inner_product( InputIt1 first1, InputIt1 last1, InputIt2 first2, T init );

template< class InputIt1, class InputIt2, class T, class BinaryOperation1, class BinaryOperation2 >
T inner_product( InputIt1 first1, InputIt1 last1, InputIt2 first2, T init, BinaryOperation1 op1, BinaryOperation2 op2 );

第一个参数和第二个参数是两个迭代器,指定一个范围。第三个参数是第二个范围的首个元素。

第一个函数版本接受一个初始值 init,它将被添加到内积中。

第二个函数版本还接受两个二元函数对象 op1 和 op2。这些将用于执行特定运算。

如果两个范围的长度不匹配,则行为未指定。

下面是一个简单的示例,使用 std::inner_product 函数计算两个向量的内积。

#include <iostream>
#include <numeric>
#include <vector>

int main()
{
    std::vector<int> v1 = {1, 2, 3};
    std::vector<int> v2 = {4, 5, 6};

    int result = std::inner_product(v1.begin(), v1.end(), v2.begin(), 0);

    std::cout << "The inner product of v1 and v2 is: " << result << std::endl;

    return 0;
}

输出:

The inner product of v1 and v2 is: 32

在此示例中,函数调用计算:

$$1 \times 4 + 2 \times 5 + 3 \times 6 + 0 = 32$$

这是两个向量的内积(点积)。

我们可以使用自定义函数对象对元素进行乘法和加法计算。

struct Multiply {
    template<typename T1, typename T2>
    auto operator()(const T1& t1, const T2& t2) const { return t1 * t2; }
};

struct Add {
    template<typename T1, typename T2>
    auto operator()(const T1& t1, const T2& t2) const { return t1 + t2; }
};

int main()
{
    std::vector<int> v1 = {1, 2, 3};
    std::vector<int> v2 = {4, 5, 6};

    int result = std::inner_product(v1.begin(), v1.end(), v2.begin(), 0, Add{}, Multiply{});

    std::cout << "The inner product of v1 and v2 is: " << result << std::endl;

    return 0;
}

输出与之前相同:

The inner product of v1 and v2 is: 32

在此示例中,我们使用了自定义的两个函数对象来执行加法和乘法运算。这些函数对象将在内部通过函数调用进行调用。

如果您在遇到需要计算内积时,请首先考虑使用 std::inner_product 函数。它可以显着减少代码量并提高代码可读性。