我有一个关于 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/