c++ - 对一系列布尔值进行或运算的表达方式是什么?
问题描述
我最近遇到了一种情况,我需要将一系列布尔值“或”在一起。
一个例子可能是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?代码”)
这种情况具有讽刺意味的是,对于可变参数模板,我们确实有fold-expression,相比之下,它会简单且富有表现力:
(bools || ...)
注意:我确实有具有范围库的boost,但是 AFAIK 它并没有真正缓解这个问题。
解决方案
推荐阅读
- php - 如何在登录时使用 getLastAuthenticationError() 检索错误消息?
- javascript - 如何从firestore网站通过文档ID获取特定的字段数据
- r - 在 R 中将天数转换为年数
- reactjs - React Native:我按下文本输入并出现键盘并在使用 Keyboard.addListener 时自动关闭一次
- google-chrome - 如何在 Chrome DevTools 网络面板中否定 `is:` 过滤器属性
- c - 如何通过指针访问结构的第二个成员?
- django - Nginx 无法代理传递给 Django docker 容器
- tensorflow - 使用 TPU 运行时在 Google Colab 上训练 Keras 模型时出错
- android - 如何保存和显示共享首选项中的项目
- php - 在 Nextcloud 上通过 SAML 登录失败,并显示“未配置帐户”