今天我们继续学习 STL 算法,学习的内容是最大最小值相关的内容,这部分包含 6 个函数:
max()max_element()min()min_element()minmax()minmax_element()首先,我们看一下函数 max(),这个函数的作用是返回给定值中的最大值。
基本的 max() 函数接收两个参数:
ab代码示例:
#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() 函数接收两个参数:
firstlast代码示例:
#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 个参数:
ab代码示例:
#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 个参数:
firstlast代码示例:
#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 中最大 / 最小算法的所有函数。