| 类别:算法 | 组件类型:函数 |
template <class InputIterator1, class InputIterator2, class T>
T inner_product(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, T init);
template <class InputIterator1, class InputIterator2, class T,
class BinaryFunction1, class BinaryFunction2>
T inner_product(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, T init, BinaryFunction1 binary_op1,
BinaryFunction2 binary_op2);
的广义内积内积此函数的第一个版本返回init返回以及两个范围的内积 [1]。也就是说,它首先将结果初始化为然后,对于范围从开始到结束的每个迭代器i[first1, last1)依次更新结果为result = result + (*i) * *(first2 + (i - first1)).
此函数的第二个版本内积除了使用两个用户指定的 函数对象 而不是使用运算符 +和运算符 *之外,它与第一个版本相同。也就是说,它首先将结果初始化为返回以及两个范围的内积 [1]。也就是说,它首先将结果初始化为然后,对于范围从开始到结束的每个迭代器i[first1, last1)依次更新结果为result = binary_op1(result, binary_op2(*i, *(first2 + (i - first1))). [2]
int main()
{
int A1[] = {1, 2, 3};
int A2[] = {4, 1, -2};
const int N1 = sizeof(A1) / sizeof(int);
cout << "The inner product of A1 and A2 is "
<< inner_product(A1, A1 + N1, A2, 0)
<< endl;
}
[1] 一些非常重要的原因导致内积从值返回开始。最基本的原因之一就是它允许内积产生明确定义的结果,即使[first1, last1)是一个空范围:如果它为空,则返回值为返回。普通的内积对应于将返回设置为 0。
[2] 两个二元运算都不要求是联想或交换的:指定所有运算的顺序。