今天我们继续学习 STL 算法,学习的内容是最大最小值相关的内容,这部分包含 6 个函数:
max()
max_element()
min()
min_element()
minmax()
minmax_element()
首先,我们看一下函数 max()
,这个函数的作用是返回给定值中的最大值。
基本的 max()
函数接收两个参数:
a
b
代码示例:
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
// 初始化 a, b
int a = 0;
int b = 1;
// 输出最大值
cout << max(a, b) << endl;
return 0;
}
/*
output
1
*/
代码讲解:
max()
的基本用法很简单,输出了两个数的最大值。
max()
也可以使用比较函数:
#include<iostream>
#include<algorithm>
using namespace std;
// 定义比较函数
inline int comp(string a, string b) {
return a.length() < b.length();
}
int main() {
// 初始化 a, b
string a = "apple";
string b = "orange";
// 输出最大值
cout << max(a, b, comp) << endl;
return 0;
}
/*
output
orange
*/
max()
还可以使用一个初始化容器,比较这个容器中的元素,求得最大值:
#include<iostream>
#include<algorithm>
using namespace std;
// 定义比较函数
inline bool comp(string a, string b) {
return a.length() < b.length();
}
int main() {
// 输出最大值
cout << max({"apple", "orange"}, comp) << endl;
return 0;
}
/*
output
orange
*/
这段代码中的容器已经初始化,返回时其中两个元素的最大值。
函数 max_element()
的作用就是返回一个容器在给定范围中的最大元素,也可以使用比较器。
基本的 max_element()
函数接收两个参数:
first
last
代码示例:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
vector<int> vi = {-2, -1, 0};
vector<int>::iterator first, last, result;
first = vi.begin();
last = vi.end();
// 输出最大元素
result = max_element(first, last);
cout << "max element index: " << result - first << endl;
return 0;
}
/*
output
max element index: 2
*/
max_element()
函数返回值时指向最大元素的迭代器。
再来看一下使用了比较函数的例子:
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
// 定义比较函数
inline bool comp(int a, int b) {
return abs(a) < abs(b);
}
int main() {
vector<int> vi = {-2, -1, 0};
vector<int>::iterator first, last, result;
first = vi.begin();
last = vi.end();
// 输出最大元素
result = max_element(first, last, comp);
cout << "max element index: " << result - first << endl;
return 0;
}
/*
output
max element index: 0
*/
在这段函数中,我们使用了比较函数,比较的是两个数的绝对值,所以 -2 的绝对值最大,输出了这个元素的索引 0。
函数 min()
的作用分别是求两个变量的最小值,或一个初始化容器中的最小元素。
函数 min_element()
的作用是返回一个容器在指定范围内的最小元素的迭代器。
这两个函数的使用与 max
的使用完全类似,只不过是由最大值变成了最小值。在此不再举例。
函数 minmax()
的作用是输出两个值的最大与最小值,或是一个初始化容器的最大最小元素。
基本的 minmax()
接收 2 个参数:
a
b
代码示例:
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
// 初始化 a, b
int a = 0;
int b = 1;
// 调用 minmax
auto p = minmax(a, b);
// 输出最小与最大值
cout << "min = " << p.first << endl;
cout << "max = " << p.second << endl;
return 0;
}
/*
output
min = 0
max = 1
*/
这个函数的返回结果是一个包含最小值与最大值的 pair
,可以使用 first
与 second
输出最小与最大值。
minmax()
还可以接受一个初始化容器,求得容器中的最小与最大元素。
代码示例:
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
// 调用 minmax
auto p = minmax({1, 2, 3});
// 输出最小与最大元素
cout << "min = " << p.first << endl;
cout << "max = " << p.second << endl;
return 0;
}
/*
output
min = 1
max = 3
*/
此时,返回的结果仍然是包含了最小与最大元素的 pair
。
minmax()
也可以使用重载的添加比较函数的用法。
函数 minmax_element()
的作用就是返回一个容器给定范围内的最小与最大元素。
基本的 minmax_element()
函数接收 2 个参数:
first
last
代码示例:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
// 初始化 vector
vector<int> vi = {1, 2, 3};
// 声明迭代器
vector<int>::iterator first, last;
// 初识化迭代器
first = vi.begin();
last = vi.end();
// 调用 minmax_element
auto p = minmax_element(first, last);
// 输出最大与最小元素
cout << "min = " << *p.first << endl;
cout << "max = " << *p.second << endl;
return 0;
}
/*
output
min = 1
max = 3
*/
需要注意的是,minmax_element()
返回的是指向最小与最大元素的迭代器构成的 pair
,所以在输出元素时,要使用 *p.first
和 *p.last
的方式。
minmax_element()
也具有使用比较函数的重载形式。
以上就是 C++ STL 中最大 / 最小算法的所有函数。