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



我有一个关于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的一个特例。

谢谢

您的实现很好,但是您可以使用函子实现所需的功能,

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()));

我不确定这是否有效,但它看起来不太好

根据答案:

实现清晰自然。

相关内容

  • 没有找到相关文章

最新更新