为什么需要 std::minmax_element?
Why need std::minmax_element?
为什么 std::minmax_element
需要 std::min_element
和 std::max_element
的组合版本?仅仅是为了节省对比,还是背后有其他好处?
std::min_element
和std::max_element
在return之前需要遍历整个容器。如果您使用 std::min_element
后跟 std::max_element
那么这是两次遍历,而如果您使用 std::minmax_element
那么您只需要一次。
所以是的,它 "just" 用于保存比较,但我认为将检索所需数据所需的工作量减半而不损失清晰度是非常值得的。
勾选一个reference page。
它列出了两个不同之处:
This algorithm is different from std::make_pair(std::min_element(), std::max_element())
, not only in efficiency, but also in that this algorithm finds the last biggest element while std::max_element
finds the first biggest element.
提到的效率提升,是因为std::minmax_element
只需要处理一次数据,而运行std::min_element
和std::max_element
都需要处理两次数据。
为什么 std::minmax_element
需要 std::min_element
和 std::max_element
的组合版本?仅仅是为了节省对比,还是背后有其他好处?
std::min_element
和std::max_element
在return之前需要遍历整个容器。如果您使用 std::min_element
后跟 std::max_element
那么这是两次遍历,而如果您使用 std::minmax_element
那么您只需要一次。
所以是的,它 "just" 用于保存比较,但我认为将检索所需数据所需的工作量减半而不损失清晰度是非常值得的。
勾选一个reference page。
它列出了两个不同之处:
This algorithm is different from
std::make_pair(std::min_element(), std::max_element())
, not only in efficiency, but also in that this algorithm finds the last biggest element whilestd::max_element
finds the first biggest element.
提到的效率提升,是因为std::minmax_element
只需要处理一次数据,而运行std::min_element
和std::max_element
都需要处理两次数据。