c++积累如何将特定函数应用于最后一个元素
c++ accumulate how to apply specific function to last element
我有一个关于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()));
我不确定这是否有效,但它看起来不太好
根据答案:
实现清晰自然。
相关文章:
- C++中的cin.ignore()函数不适用于整个流
- Insert函数不适用于2 if语句C++
- 一个函数,用于查找字符串1包含字符串2 c++的次数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- RcppEigen 模板化函数,用于填充单位法线
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- C++ 函数,用于检查每个位是否为 0 或 1
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- 使用 std::应用于 std::bind
- 为什么可变参数函数不适用于模板
- 如何将Affine3d应用于Vector3d
- Rcpp并行无匹配函数,用于调用"转换"
- 传递通用函数,用于梯形规则的数值积分
- 函数可以应用于 std::optional,并返回一个可选值吗?
- 如何将元函数应用于variadic模板类的模板类型
- 将函数应用于std::map值,其中包含for each和lambda函数
- 如何将函数应用于deque的每个元素
- 如何将opencv函数polylines()应用于c++中的列表