c ++积累如何将特定函数应用于最后一个元素

时间:2015-06-05 07:36:39

标签: c++ stl stl-algorithm

我有关于std :: accumulate的问题。

通常情况下,累积将采用std::vector<U> vect,类型为T的种子,并且(左)折叠该范围的函数f TxU->U

T result = accumulate( vect.begin(), vect.end(), seed, f);

是否有一种自然的方法可以为最后一个元素应用特定版本的f? 这是针对PDE的,我有最后一步的特殊条件。

我们可以做类似的事情:

T result1 = accumulate( vect.begin(), vect.end()-1, seed, f1);
T result2 = f2( result1, vect.back() );

但我想知道是否有更自然的方式,因为f2实际上是f1的一个特例。

由于

2 个答案:

答案 0 :(得分:0)

您的实施很好,但您可以通过仿函数实现所需的功能,

class myFunctor{
  int size_of_vector;
  int nbCalls;
  myFunctor(int size) : size_of_vector(size), nbCalls(0){}
  ... operator()(...) {
    if((nbCalls++)==size_of_vector)
       // call special function
    else
       // call f
  }
};

然后像这样使用它:

T result1 = accumulate( vect.begin(), vect.end(), seed, myFunction(vect.size()));

我不确定这是否有效,但无论如何看起来并不好看

答案 1 :(得分:0)

根据答案:

实施清晰自然。向量必须非空。