SGI

内积

类别:算法 组件类型:函数

原型

inner_product是一个重载名称;实际上有俩内积个函数。
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);

说明

inner_product计算指定范围[first1, last1)[first2, last2).

的广义内积内积此函数的第一个版本返回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]

定义

定义在标准头文件 numeric 中,以及非标准的后向兼容性头文件 algo.h 中。

类型要求

对于第一个版本对于第二个版本

前置条件

复杂性

线性。确切执行last1 - first1次每个二元运算。

示例

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

参见

求和, 部分求和, 相邻差, 计数
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息