📅  最后修改于: 2023-12-03 14:39:52.176000             🧑  作者: Mango
STL是C++的标准模板库,提供了一组强大的数据结构和算法,包括std::minmax()和std::minmax_element()。这两个函数可以帮助开发者在最小化时间复杂度的同时,更方便地获取对于给定范围内的最小值和最大值。
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::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()
给开发者提供了一些方便的工具来查找最小值和最大值。在需要找到一个范围内的最小值或最大值时,它们是非常有用的功能。这些函数提供了高效的方式来查找这些元素,并且可以通过比较器函数来进行自定义比较操作。