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

通常,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()));

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

关于c++累积如何将特定函数应用于最后一个元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30660923/

10-12 05:46