最近忙于比赛,没时间发博客,我整理了c++的常用库函数大家有需要的收藏起来。
竞赛常用库函数
1 快速排序
sort
常用于快速排序,或者类似的排序算法,
写法基本为:
sort(a,a+n);也可以写成sort(a.begin(),a.end());
a为首地址,a+n为最后一个地址.默认使用<.
如果想自定义比较,需要传入第三个参数,用函数
例子如下:
bool cmp(const int &u,const int &v )
{
Return u>v;
}
sort(a.begin(),v.end(),cmp);
2 最值查找
min和max函数只能传入两个值或者列表
min(a,b)返回小值
min({1,2,3,4})
max(a,b)返回大值
max({1,2,3,4})
min_element和max_element 查找数组中的最大值和最小值
例子:
vector<int>a={5,1,3,9,11};
cout<<*min_element (a.begin(),a.end())<<’\n’;
输出结果为1
vector<int>a={5,1,3,9,11};
cout<<*min_element (a.begin(),a.end())<<’\n’;
输出结果为11
nth_element用于部分排序nth_element(st,k,ed);
k的前面比他小 k的后面比他大
例子:
vector<int>v={5,1,7,3,10,18,9};
nth_element(v.begin(),v.begin+3,v.end());
for(auto &i:v)cout<<i<<’ ’;
输出结果为3 1 5 7 9 18 10
3二分查找
Binary_search查找是否存在目标元素
vector<int>number={1,3,5,7,9};
int target=5;
bool found=binary_search(number.begin(),number.end(),target);
if(found)
{
cout<<”target element”<<target<<”found”<<endl;
}
else{
cout<<”target element”<<target<<”not found”<<endl;
}
lower_bound和upper_bound
lower_bound(st,ed,x)找第一个大于等于x的元素地址
upper_bound(st,ed,x)找第一个大于x的元素地址
找地址,前提必须为非降序
例子:
vector<int>v={5,1,7,3,10,18,9};
sort(v.begin(),v.end());
for(auto &i:v)cout<<i<<’ ’;
cout<<’\n’;
//找到数组中第一个大于等于8的元素的位置
cout<<(lower_bound(v.begin(),v.end(),8)-v.begin())<<’\n’;
4大小写互换
Islower/isupper函数
用于查找字符是否为小/大写字母
例子:
char ch1=‘A’;
char ch2=‘b’;
if(islower(ch1)){
cout<<ch1<<”is a lowercase letter”<<endl;
}else{
cout<<ch1<<”is not a lowercase letter”<<endl;
}
判断大写的和上面一样,就不写了
tolower/toupper转换大小写
tolower(char ch)可以将ch转换为小写字母,如果ch不是大写字母则不进行操作
例子:下面是将大写转换为小写了;其他例子也和这差不多
Char ch1=’A’;
char lowercasech1=tolower(ch1);
cout<<”lowercase of”<<ch1<<”is”<<lowercasech1<<endl;
5全排列
next_permutation和prev_permutation
next_permutation是生成当前序列的下一个排列
而prev_permutation是生成当前的上一个排列
例子:
Vector<int>nums={1,2,3};
cout<<”initial permutation:”;
for(int num: nums)
{
cout<<num<<” ”;
}
cout<<endl;
while(next_permutation(nums.begin(),nums.end()))
{
cout<<”next permutation:”;
for(int num:nums)
{
cout<<num<<” ”;
}
cout<<endl;
}
6 Memset()设置内存块值的函数
声明:void*memset(void*ptr,int value,size_t num);
例子:int arr[10];
Memset(arr,0,sizeof(arr));
运行结果为:0 0 0 0 0 0 0 0 0 0
7 Swap交换两个参数
Int a=10;
Int b=20;
Swap(a,b);
结果为20 10
8 Reverse反转元素顺序
将reverse(st,ed)中元素顺序进行反转
Int main()
{
vector<int> vec = {1,3,5,7,9};
reverse(vec.begin(),vec.end());
for(int num: vec)
{
cout<<num<<" ";
}
cout<<std::endl;
return 0;
}
9 Unique去除容器相邻重复的元素
Unique(st,ed)
例子:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[]={1,4,2,3,3,4,5,2,3,7,5};
sort(a,a+11);
int n=unique(a,a+11)-a;
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
}
以上所有库函数都可用万能头文件:#include<bits/stdc++.h>