我有一个 std::vector<bool>
实例(比方说 foo
),我需要编写一个返回 true
的函数如果所有元素都是 true
.
我用
return *std::min_element(foo.begin(), foo.end());
实现这一目标,但这让我开始思考:你知道最小元素是 false
, 如果容器包含至少一个 false
值(value)。换句话说,你不需要遍历整个容器到end()
。 ,这意味着 std::min_element
的特化是合适的,就像std::vector<bool>
的特化一样已被认为是合适的。
我错过了什么吗?或者这会被视为过早的优化吗?也许一个好的编译器无论如何都会解决这个问题。
最佳答案
无需专门化std::min_element
对于 std::vector<bool>
.要获得您想要的功能,您可以使用 std::any_of
它将在第一次出现时停止。
return !std::any_of(foo.begin(), foo.end(), [](auto e){ return e == false; });
如果我们将其更改为 std::all_of
作为Some programmer dude建议你不需要否定返回值,这给了你
return std::all_of(foo.begin(), foo.end(), [](auto e){ return e; });
哪个更清晰,更容易理解。
关于c++ - 为什么 std::min_element 和 company 不专用于 std::vector<bool>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44436550/