版本1:

template < class InputIterator1, class InputIterator2, class T>
T inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init)
{
//以第一序列之元素个数为据,将两个序列都走一遍
for( ; first != last1; ++first1, ++first2)
init = init + (*first1 * *first2);//执行两个序列的一般内积
return init;
}

版本2:

template <class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2>
T inner_product (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2)
{
//以第一序列之元素个数为据,将两个序列都走一遍
for( ; first != last1; ++first1, ++first2)
//以外界提供的仿函数来取代第一版中的operator*和operator+
init = binary_op1(init, binary_op2(*first1, *first2));
return init;
}

  算法inner_product 能够计算[first,last)和[first2, first2 +( last1 - first1))的一般内积。注意,你一定得提供初值init。这么做的原因之一是当[first,last)为空时,仍可以获得一个明确定义的结果。如果你想计算两个vector的一般内积,应该将 init 设为0。

  

  第一个版本会将两个区间的内积结果加上init。也就是说,现将结果初始化为init,然后针对[ first1,last1 )的每一个迭代器 i ,由头至尾依序执行result = result + ( *i ) * * (first2 + ( i - first ))。

  

  第二个版本与第一版本的唯一差异是以外界提供之仿函数来取代 operator+ 和 operator*。也就是说,首先将结果初始化为init,然后针对[first1,last1)的每一个迭代器i,由头至尾依序执行 result = binary_op1(result, binary_op2(*i, *(first2 + ( i - first1))))。

  

  式中所用的二元仿函数不必满足交换律和结合律。

  

  inner_product 所有运算行为的顺序都有明确规定。

最新文章

  1. Javaweb——过滤器映射
  2. linux cntlm代理的配置
  3. Alice and Bob(2013年山东省第四届ACM大学生程序设计竞赛)
  4. Shell编程基础教程1--Shell简介
  5. 3.2 Git 分支 - 分支的新建与合并
  6. windows服务控制类
  7. Eclipse启动Tomcat访问不了首页
  8. android设置组件所占的比例
  9. Eclipse + CDT + YAGARTO + J-Link,STM32开源开发环境搭建与调试
  10. [C++]Infinite House of Pancakes——Google Code Jam 2015 Qualification Round
  11. Direct3D 使用质地
  12. sql server 去除字符中空格的方法
  13. MogoDB(6)--mongoDB高可用和4.0特性
  14. 【AtCoder】ARC081
  15. wpf(dispather调度者)
  16. python摸爬滚打之day01----初识Python
  17. webpack打包jQuery,jQuery未定义
  18. LeetCode题解之Find All Duplicates in an Array
  19. 前端(以Vue为例)webpack打包后dist文件包如何部署到django后台中
  20. 有料面试题之--Object里面的方法

热门文章

  1. protobuf 动态创建
  2. 关于Docker目录挂载的总结(转)
  3. Ubuntu apt-get彻底卸载软件包【转】
  4. SQL Server 性能优化实战系列(二)
  5. 【C++】C++中类的基本使用
  6. CentOS 7.2编译安装PHP7
  7. STM32F105 PA9/OTG_FS_VBUS Issues
  8. vue2.0引入现有css文件
  9. 【iCore4 双核心板_FPGA】实验十八:Niosii——基于内部RAM建立第一个软核
  10. 关于 GET、POST、表单、Content-Type