类别:算法 | 组件类型:函数 |
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] 两个二元运算都不要求是联想或交换的:指定所有运算的顺序。