【发布时间】:2026-02-24 04:05:01
【问题描述】:
为什么我们需要std::min_element 和std::max_element 的组合版本std::minmax_element?只是为了节省比较,还是背后有其他好处?
【问题讨论】:
标签: c++ stl-algorithm
为什么我们需要std::min_element 和std::max_element 的组合版本std::minmax_element?只是为了节省比较,还是背后有其他好处?
【问题讨论】:
标签: c++ stl-algorithm
std::min_element 和std::max_element 在返回之前需要遍历整个容器。如果您使用std::min_element 后跟std::max_element,那么这是两次遍历,而如果您使用std::minmax_element,那么您只需要一次。
所以是的,它“只是”用于保存比较,但我认为将检索所需数据所需的工作量减半而不丢失清晰度是非常值得的。
【讨论】:
std::minmax_element 找到last 最大的元素,而std::max_element 找到first 最大的元素。 Source
O(n)(即n 与任何不相关的常数因子)有点奇怪,当你要争论常数因子时……顺便说一句,你的意思是ϴ。
它列出了两个不同之处:
这个算法与
std::make_pair(std::min_element(), std::max_element())的不同之处不仅在于效率,还在于这个算法找到last最大的元素,而std::max_element找到first最大的元素元素。
提到的效率提升,是因为std::minmax_element 只需要处理一次数据,而同时运行std::min_element 和std::max_element 需要处理两次数据。
【讨论】: