我有关于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的一个特例。
由于
答案 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)
根据答案:
实施清晰自然。向量必须非空。