有"accummulate_if"吗?
Is there a "accummulate_if"?
本文关键字:if accummulate 更新时间:2023-10-16
是否有类似于accummulate()
的函数,但在执行操作时提供了一元前提条件来过滤线性容器?我搜索accummulate_if
但没有。谢谢!
更新:谢谢所有的友好回答。我最终这样做:
std::for_each(v.begin(), v.end(), [&](int x){if (Pred) sum += x;});
你真的必须使用算法吗?像下面这样简单的事情不行吗?
for (const auto& v: V) if(pred(v)) sum+=v;
山姆的想法也很好。 但我会用lambda来做:
sum = accumulate(
V.begin(), V.end(), 0,
[](int a, int b){return pred(b)? a+b: a;}
);
将你自己的二进制运算传递给 std::accumulate():
#include <iostream>
#include <vector>
#include <numeric>
bool meets_criteria(int value) {
return value >= 5;
}
int my_conditional_binary_op(int a, int b) {
return meets_criteria(b) ? a + b : a;
}
class my_function_object {
private:
int threshold;
public:
my_function_object(int threshold) :
threshold(threshold) {
}
bool meets_criteria(int value) const {
return value >= threshold;
}
int operator()(int a, int b) const {
return meets_criteria(b) ? a + b : a;
}
};
int main() {
std::vector<int> v { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//sum [5...10] = 45
int sum;
sum = std::accumulate(v.begin(), v.end(), 0, my_conditional_binary_op);
std::cout << sum << std::endl;
//Use a function object to maintain states and additional parameters like 'threshold'
sum = std::accumulate(v.begin(), v.end(), 0, my_function_object(5));
std::cout << sum << std::endl;
return sum;
}
不,但你可以自己写:
template
<
typename InputIterator,
typename AccumulateType,
typename BinaryOperation,
typename Predicate
>
const AccumulateType accumulate_if(
InputIterator first,
const InputIterator last,
AccumulateType init,
BinaryOperation&& binary_op,
Predicate&& predicate)
{
for (; first != last; ++first)
if (predicate(*first)) init = binary_op(init, *first);
return init;
}
用法:
int main(int argc, char* argv[])
{
std::vector<int> v = {1,2,3,4,5};
std::cout << accumulate_if(v.begin(), v.end(), 0, std::plus<int>(), [] (int n) { return n > 3; });
return 0;
} // outputs 9
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 无论条件是否为true,if总是在c++中执行
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何删除peer if else分支中的冗长句子
- 我似乎对if/else的基本语句有问题:/
- if数组上的随机数
- 将按位if条件转换为普通if条件
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 使用if-else将数字转换为单词
- 为什么简单的算术减法在"if"条件下不起作用?
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句