📜  C++ STL中的std :: minmax()和std :: minmax_element()(1)

📅  最后修改于: 2023-12-03 14:39:52.176000             🧑  作者: Mango

C++ STL中的std::minmax()和std::minmax_element()

STL是C++的标准模板库,提供了一组强大的数据结构和算法,包括std::minmax()和std::minmax_element()。这两个函数可以帮助开发者在最小化时间复杂度的同时,更方便地获取对于给定范围内的最小值和最大值。

std::minmax()

std::minmax() 将两个值比较,返回一个 std::pair 对象,对象包含两个成员变量,分别为这两个值中的最小值和最大值。

函数原型为:

template< class T > 
std::pair< const T&, const T& > minmax( const T& a, const T& b );
template< class T, class Compare >  
std::pair< const T&, const T& > minmax( const T& a, const T& b, Compare comp );

其中第一种情况是没有比较器的情况,返回值类型是 std::pair<const T&, const T&>。第二种情况需要传入一个比较器函数,返回值类型仍然是一样的。

使用示例:

#include <algorithm>
#include <iostream>
using namespace std;

int main()
{
    int x = 1, y = -1;
    auto p = minmax(x, y);
    cout << p.first << " " << p.second << endl;
    return 0;
}

输出结果为:-1 1

std::minmax_element()

std::minmax_element() 可以在给定范围内查找最小和最大元素。它使用给定的比较器函数(默认为 std::less)比较元素并返回指向它们的迭代器。

函数原型为:

template< class ForwardIt >
std::pair<ForwardIt, ForwardIt> minmax_element( ForwardIt first, ForwardIt last );
template< class ForwardIt, class Compare >
std::pair<ForwardIt, ForwardIt> minmax_element( ForwardIt first, ForwardIt last, Compare comp );

它返回一个pair,分别表示最小值和最大值的迭代器。

使用示例:

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> vec = {4, 2, 6, 8, 1, 7, 3, 5, 9};
    auto p = minmax_element(vec.begin(), vec.end());
    cout << *p.first << " " << *p.second << endl;
    return 0;
}

输出结果为:1 9

总结

std::minmax()std::minmax_element()给开发者提供了一些方便的工具来查找最小值和最大值。在需要找到一个范围内的最小值或最大值时,它们是非常有用的功能。这些函数提供了高效的方式来查找这些元素,并且可以通过比较器函数来进行自定义比较操作。