zoukankan      html  css  js  c++  java
  • inner_product

    版本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 所有运算行为的顺序都有明确规定。

  • 相关阅读:
    k8s-HPA自动伸缩pod数量
    k8s-命令使用
    k8s-业务镜像版本升级及回滚
    k8s-yml文件详解
    k8s-部署dashboard
    k8s-kubeasz项目后期添加节点及k8s版本升级
    k8s-部署kube dns及coredns
    CDNbest-访问限制
    CDNbest-访问限制
    CDNbest-改变回源host
  • 原文地址:https://www.cnblogs.com/Zhoier-Zxy/p/8323982.html
Copyright © 2011-2022 走看看