是否有类似“std::and”的东西?或“std::or”?
给定一个布尔值容器(例如 std::vector
),是否存在一个标准函数,如果所有值都是 true,则返回
(“和”)或 true
true
如果至少有一个值为 true
(“或”),并进行短路评估?
今天早上我在 www.cplusplus.com 中进行了挖掘,但找不到任何接近的东西。
Given a container of boolean values (An example is std::vector<bool>
), is there a standard function that returns true
if all the values are true
("and") or true
if at least one value is true
("or"), with short circuit evalutation ?
I digged trough www.cplusplus.com this morning but couldn't find anything close.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我刚刚将 print 语句插入到 lambda 中,是的,这两个函数都执行短路。
I just inserted print statements into the lambda, and yes, both functions perform short-circuiting.
您可以通过以下方式实施:
AND:
OR:
You can implement by:
AND:
OR:
您可以使用函数对象
逻辑_and
和逻辑_or
与减少相结合到做到这一点。accumulate
计算减少量。因此:警告:这不使用短路(
accumulate
函数对短路一无所知,即使函子知道),而 Igor 的聪明解决方案是。You can use the function objects
logical_and
andlogical_or
in conjunction with a reduction to accomplish that.accumulate
calculates the reduction. Hence:Caveat: this is not using short-circuiting (the
accumulate
function knows nothing about short-circuiting even though the functors do), while Igor’s clever solution is.如果您不需要针对不同容器类型的通用算法...
当您正在寻找短路评估时,您可以给 std::valarray 一个机会。对于
and
使用valarray::min() == true
对于or
您可以使用std::find
作为伊戈尔提到过。如果您知道编译时要存储的元素数量,您甚至可以使用 std::bitset:
If you do not need a generic algorithm for different container types...
As you are looking for short circuit evaluation, you may give std::valarray a chance. For
and
usevalarray::min() == true
foror
you could usestd::find
as mentioned by Igor.In case you know the number of elements to store at compile time, you could even use a std::bitset: