首页 > 解决方案 > 对一系列布尔值进行或运算的表达方式是什么?

问题描述

我最近遇到了一种情况,我需要将一系列布尔值“或”在一起。

一个例子可能是std::vector<bool> bools;

我想出了一些不同的方式将它们全部组合在一起:

std::any_of(bools.begin(), bools.end(), [](bool x) { return x; } )

或者

std::find(bools.begin(), bools.end(), true) != bools.end() 

或者

std::accumulate(bools.begin(), bools.end(), false, std::logical_or);

或者

std::accumulate(bools.begin(), bools.end(), 0) != 0;

如果长度是固定的,我可以使用std::bitset具有该any功能的 a - 但这只是这种情况下的一个选项。

在所有这些中,既不是很直观,也不是在这里真正清楚地表达了意图(在某种程度上,它们都表现出某种“WTF?代码”)

这种情况具有讽刺意味的是,对于,我们确实有,相比之下,它会简单且富有表现力:

(bools || ...)

注意:我确实有具有范围库的,但是 AFAIK 它并没有真正缓解这个问题。

标签: c++algorithmc++17

解决方案


推荐阅读