本文介绍一些算法里常用的函数,以及具体用法
1、vector删除 erase()
vector<int> vec = {1, 2, 3, 4, 5};
vec.erase(vec.begin() + 2); // 删除索引为 2 的元素(即元素 3)
vec.erase(vec.begin(), vec.begin() +3); // 删除索引为 0 到 2 的元素
vec.erase(remove(vec.begin(), vec.end(), 3), vec.end()); // 删除所有值为 3 的元素
2、数组去重 unique()
vector<int> vec={1,2,2,3,3,4,5};
vec.erase(unique(vec.begin(),vec.end()),vec.end());
//输出结果 1 2 3 4 5
3、反转字符串 reverse( )
string s="ABCDE";
reverse(s.begin(),s.end());
//结果: EDCBA
4、查询函数 find( )
vector<int> vec={100,200,123,400};
int index = find(vec.begin(),vec.end(),400)-vec.begin();
// index返回的就是查询目标在数组的下标 ,这里为3
5、排序 sort()
vector<int> vec={100,200,123,400};
sort(vec.begin(),vec.end()); //从小到大
sort(vec.begin(),vec.end(),greater<int>()); //从大到小
6、计数 count()
vector<int> vec={1,2,2,2,3,4};
int cnt=count(vec.begin(),vec.end(),2);
//cnt就是数组中2出现的次数
7、二分查找 lower_bound upper_bound
vector<int> vec={1,2,3,3,4};
int aa=lower_bound(vec.begin(),vec.end(),2)-vec.begin();
int bb=upper_bound(vec.begin(),vec.end(),3)-vec.begin();
//需要保证原数组有序
//lower_bound查找第一个大于等于的查询数的值,这里的aa是这个值的下标 1
//upper_bound查找第一个大于查询数的值,这里bb是这个值的下标 4
8、截取字符串 substr()
string s="sadasd";
string a=s.substr(0,3);
//结果为 sad
//截取从第0个下标开始,前三个元素
9、转字符串 to_string()
int num=123;
string s=to_string(num);
//将int型转为 string
10、将字符串转为 int stoi()
string str = "123";
int num = stoi(str);
//将string转为int
11、交换函数 swap()
vector<int> vec={1,2,3};
swap(vec[0],vec[2]);
//交换 下标0 和 下标2 的位置
string s="abcd";
swap(s[1],s[3]);
//可以交换字符串 结果为adcb
12、获取数组最大、最小值 max_element()、 min_element()
vector<int> nums = {1,2,3,8,0,100,11,9};
cout<<*max_element(nums.begin(), nums.end())<<endl; //获取最大值
cout<<*min_element(nums.begin(), nums.end())<<endl;//获取最小值
13、向上取整 ceil () 、向下取整 floor()、四舍五入round()
double a=4.4;
cout<<floor(a)<<endl;;
cout<<ceil(a)<<endl;
cout<<round(a)<<endl;
结果为: 4 5 4
14、求次方 pow()
int a=2,b=3;
cout<<pow(a,b);
//求 2^3 结果为8
因为一般用快速幂替代这个函数,所以这里贴一个快速幂板子 求 m^k
int qmi(int m,int k){
int res=1;
while(k){
if(k&1) res=res*m;
m=(m*m);
k>>=1;
}
return res;
}
15、设置小数位数 fixed setprecision()
double a=1.234567;
cout<<fixed<<setprecision(3)<<a;
//输出3位小数
//输出 1.235 小数最后一位会自动四舍五入
16、全排列函数 next_permutation()
vector<char> num={'a','b','c'};
do{
cout<<num[0]<<num[1]<<num[2]<<endl;
}while(next_permutation(num.begin(),num.end()));
17、转化为二进制 bitset<int> ()
int a=20;
cout<<bitset<8>(a).to_string();
//这里转化为字符串输出结果 00010100
gg,推荐课程:https://xxetb.xetslk.com/s/kNPSd