- 1.min和max函数
- min(a,b)返回a和b中较小的那个值,只能传入两个值,或传入一个列表。
min(3,5)=3;
min({1,2,3,4})=1;
- max(a,b)返回a和b中较大的那个值,只能传入两个值,或传入一个列表。
max(8,5)=8;
max({1,2,3,4})=4;
### 时间复杂度为0(1),传入参数为数组时,时间复杂度为0(n),n为数组大小(min,max函数是在取最值操作时最常用的操作) ### 这段代码中不加‘*’,max_element和min_element的返回值减去数组头地址,输出分别为4和5,这个4和5就是数组中最大元素(最小元素)在这个数组的下标
2.min_element和max_element函数
min_element(st,ed)返回值地址[st,ed)中最小的那个值的地址(迭代器),传入参数为两个地址或迭代器
max_element(st,ed)返回值地址[st,ed)中最大的那个值的地址(迭代器),传入参数为两个地址或迭代器
//初始化v
vector<int>v={5,9,3,1,11};
//输出最大的元素,*表示解引用,即通过地址(迭代器)得到值
cout<<*max_element(v.begin(),v.end())<<"\n"; //输出11
###时间复杂度均为0(n),n为数组大小(由传入的参数决定)
- max和max_element的区别(min和min_element的区别)
#include <iostream>
#include <algorithm>
using namespace std;
int main(void)
{
int a[6] = {5,3,2,4,6,1};
int b = a[0];
int c = a[1];
cout<<max(b, c)<<" "<<min(b,c)<<endl; //输出为5 3
cout<<max_element(a,a+6) - a<<endl;// 输出为4
cout<<*max_element(a,a+6)<<endl;//输出为 6
cout<<min_element(a,a+6) - a<<endl;// 输出为5
cout<<*min_element(a,a+6)<<endl; //输出为1
return 0;
}
- ### 这段代码中不加‘*’,max_element和min_element的返回值减去数组头地址,输出分别为4和5,这个4和5就是数组中最大元素(最小元素)在这个数组的下标
*代表取出该地址的值
3.nth_element函数
- nth_element(st,k,ed) //进行部分排序,返回值为void()
- 传入参数为三个地址或迭代器(其中第二个参数位置的元素将处于正确的位置,其他位置元素的顺序可能是任意的,但前面的都比它小,后面的都比它大)
- 时间复杂度0(n)
//初始化v
vector<int>v={5,1,7,3,10,18,9};
//输出最大的元素,*表示解引用,即通过地址(迭代器)得到值
nth_element(v.begin(),v.begin()+3,v.end())<<"\n";
//这里v[3]的位置将会位于排序后的位置,其他的任意
for(auto &i:v){
cout<<i<<' ';
} //输出3 1 5 7 9 18 10
### 这里v.begin()+3,那么v[3]位置的元素就是正确的(即第四大的数在这个位置,就是7),而且7左边都小于等于7,右边都大于等于7(除v[3]这个位置其他位置都是无序的)