c++ - 为什么 std::min_element 和 company 不专用于 std::vector<bool>

标签 c++ algorithm vector boolean specialization

我有一个 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/

相关文章:

c++ - std::random_device 加密安全吗?

c++ - 在 std::move'ing 时警告调用复制构造函数

c++ - 理解第 nth_element

algorithm - 与矢量的角度

C++11 vector push_back 不明确

c++ - 连续迭代器上的 SIMD 指令

c++ - 将常量 cstring append 到我自己的 String 类对象

python - 区域生长算法

python-3.x - Hackerrank 测试用例不正确? Dijkstra 最短距离 2

c++ - 为什么使用 rbegin() 而不是 end() - 1?