1.sort排序
sort函数包含在头文件中。在使用前需要#include < algorithm> 或使用万能头文件。sort是C++标准库中的一个函数模板,用于对指定范围内的元素进行排序。sort算法使用的是快速排序(QuickSort)或者类似快速排序的改进算法,具有较好的平均时间复杂度,一般为O(nlogn)。
1.1 sort基础用法
sort(起始地址,结束地址的下一位,*比较函数);比较函数默认升序,是小于号“<”.
int a[1000];
int n;
int main()
{
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
//排序
sort(a,a+n);//左开右闭
for(int i=0;i<n;i++) cout<<a[i]<<" ";
}
sort(起始地址,结束地址的下一位,*比较函数);
int main()
{
vector<int> v={5,1,9,6,78,2};
//排序
sort(v.begin(),v.end());
//输出
for(int i=0;i<v.size();++i) cout<<v[i]<<' ';
cout<<"\n";
for(auto i:v) cout<<i<<' ';
}
1.2 自定义比较函数
sort默认使用小于号进行排序,如果想要自定义比较规则,可以传入第三个参数,可以是函数或lambda表达式。
bool cmp(const int& u,const int& v)
{
return u>v;
}
int main()
{
vector<int> v={5,1,9,6,78,2};
//降序排列
sort(v.begin(),v.end(),cmp);
//输出
for(int i=0;i<v.size();++i) cout<<v[i]<<' ';
}
2.最值查找
2.1 min和max函数
2.2 min_element和max_element函数
2.3 nth_element函数
3.二分查找
3.1 二分查找的前提
库函数只能对数组进行二分查找。对一个数组进行二分查找的前提是这个数组中的元素是单调的,一般为单调不减,当然如果是单调不增也可以(需要修改比较函数)。例如:
例如:
[1,5,5,9,18]是单调的
[1,9,9,7,15]不是单调的
[9,8,8,7,7,1]是单调的
3.2 binary_search函数
binary_search是C++标准库中的一个算法函数,用于在已排序的序列(例如数组或容器)中查找特定元素。它通过二分查找算法来确定序列中是否存在目标元素。函数返回一个bool值,表示目标元素是否存在于序列中。如果需要获取找到的元素的位置,可以使用std::lower_bound函数或std::upper_bound函数。
3.3 lower_bound和upper bound
前提:数组必须为非隆序。如果要在非升序的数组中使用,可以通过修改比较函数实现(方法与sort自定义比较函数类似)
lower_bound(st,ed,x)返回地址[st,ed)中第一个大于等于x的元素的地址。
upper_bound(st,ed,x)返回地址[st,ed)中第一个大于x的元素的地址。
如果不存在则返回最后一个元素的下一个位置,在vector中即end()。
int main()
{
vector<int> v={5,1,9,6,78,2};
sort(v.begin(),v.end());
for(int i=0;i<v.size();++i) cout<<v[i]<<' ';
cout<<(lower_bound(v.begin(),v.end(),8)-v.begin())<<"\n";//地址-首地址=下标
}
4.大小写转换
4.1 islower/isupper函数
4.2 tolower/toupper函数
5.全排列
5.1 next_permutation()函数
next_permutation函数用于生成当前序列的下一个排列。它按照字典序对序列进行重新排列,如果存在下一个排列,则将当前序列更改为下一个排列,并返回true;如果当前序列已经是最后一个排列,则将序列更改为第一个排列,并返回false。
例如:
5.2 prev-permutation()函数
prev_permutation函数与next_permutation函数相反,它用于生成当前序列的上一个排列。它按照字典序对序列进行重新排列,如果存在上一个排列,则将当前序列更改为上一个排列,并返回true;如果当前序列已经是第一个排列,则将序列更改为最后一个排列,并返回false。
6.其他库函数
6.1 memset()函数
memset()是一个用于设置内存块值的函数.它的原型定义在头文件中,函数的声明如下:
6.2 swap()函数
6.3 reverse()函数
reverse()是一个用于反转容器中元素顺序的函数
它的原型定义在头文件中,函数的声明如下:
6.4 unique()函数
unique()是一个用于去除容器中相邻重复元素的函数。它的原型定义在头文件中,函数的声明如下: