【发布时间】:2017-11-10 05:13:33
【问题描述】:
我有一个std::vector<bool> 实例(比如foo),如果所有元素都是true,我需要编写一个返回true 的函数。
我用
return *std::min_element(foo.begin(), foo.end());
实现这一点,但这让我想到:你知道最小元素是false,如果容器包含至少一个false 值。换句话说,您不需要遍历整个容器到end(),这意味着std::min_element 的特化是合适的,就像std::vector<bool> 的特化被认为是合适的一样。
我错过了什么吗?或者这会被视为过早的优化吗?也许一个好的编译器无论如何都会解决它。
【问题讨论】:
-
为什么不使用内置短路功能的
std::any_of? -
@NathanOliver 如果 OP 想知道 all 元素是否为
true,那么any_of似乎不正确。all_of也有短路,如果谓词返回false,它就会停止。 -
std::any_of将谓词设置为false大概是我需要做的。 -
@Someprogrammerdude 但是如果
any_of他们是假的,那么你知道他们并不都是真的。 -
@Someprogrammerdude 查看
any_of的代码后,您必须否定它的返回以获得正确的值。看起来all_of在这里会更有意义,因为它会返回正确的值。
标签: c++ algorithm vector boolean specialization