我有一个关于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()));
我不确定这是否有效,但它看起来不太好
根据答案:
实现清晰自然。