算法常用的函数(C++)

本文介绍一些算法里常用的函数,以及具体用法


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值