C++编程题最常用函数汇总

内容会持续更新,有错误的地方欢迎指正,谢谢!

1.类型转化

string转int的方式

采用标准库cstdlib中atoi函数,<cstdlib>是C++里面的一个常用函数库, 等价于C中的<stdlib.h>,但不需引入,已默认引入。

string str = "55";
int temp = std::atoi(str.c_str()); 
string转double的方式

采用标准库cstdlib中atof函数

string str = "55.5"; 
double temp = atof(char * str);

补充:标准库cstdlib里还有取绝对值函数abs

内置类型转string的方式

采用std::to_string函数,不需引入头文件,直接用就好。to_string函数还定义了任何其他内置类型转为string的重载函数,很实用。

int转string举例:

int temp = 55; 
cout << std::to_string(temp) << endl; 

2.伪随机数函数

采用标准库cstdlib中srand和rand函数

//由于是计时器原理实现的种子,所以应该在main()里设置种子,这样每次外部调用结果才随机。
//若在外部每次调用时都重新设置种子了,那么多次调用的结果都是相同的!
srand((unsigned)time(NULL));

//产生[a,b]上的随机数 ((double)rand()/RAND_MAX)*(b-a) + a ,其中
//(double)rand()/RAND_MAX可以得到一个0~1的随机数
double temp= (double(rand()) / RAND_MAX) * sum;//产生0到sum之间的浮点数

//产生[0,n-1]的整数
int temp = rand()%n;

详细应用请见http://blog.csdn.net/billcyj/article/details/79018918

3.STL通用算法函数

#include <algorithm>里的常用函数

1.交换两个元素 swap()
int x = 10, y = 20;
swap(x, y);
2.反转元素的次序 reverse()

reverse()会将区间[beg,end)内的元素全部逆序

string str("hello");
//如何才能只反转ello,即变成holle?如下
reverse(str.begin()+1,str.end());
3.以很好的平均效率排序 sort()

是一种根据实际数据智能选择排序算法的函数,sort()会将区间[beg,end)内的元素排序,默认升序

bool cmp(int a,int b)
{
    return a>b;//降序排列
}
int array[5]={1,2,3,4,5};
sort(array,array+4,cmp);//通过自定义cmp函数将其改为降序排序

输出为:4 3 2 1 5

4.两个值中较小的 min(),较大的 max()
5.按字典序的上/下一个排列

按字典序的下一个排列next_permutation(),按字典序的前一个排列 prev_permutation()

do//do-while循环和next_permutation、prev_permutation更配喔~
{
    res.push_back(str);
}while(next_permutation(str.begin(),str.end()));
//next_permutation()执行一次 当前的str序列abc 就变成了 升序中的下一个str序列acb
//当 当前的str序列 是 最后一种str序列cba ,那么它就会变成最初的str序列abc

详细应用请见http://blog.csdn.net/billcyj/article/details/79017079文章后半部分

4.其他

x为2的幂时,n%x==0等于(n&(x-1))==0,==优先级比&高,所以一定要加( )

#include<cmath>里的sqrt()开方函数

#include<map>里的map的初始化、插入、遍历:

map<int, string> myMap={{ 5, "张大" },{ 6, "李五" }};//初始化
myMap.insert(pair<int,string>(2,"陈三"));//插入

auto iter=myMap.begin();//利用迭代器iter遍历
while(iter!=myMap.end())
{
    cout<<myMap->first<<","<<(*myMap).second<<endl;
    ++iter;
}

auto it=myMap.find(2);//find()返回一个指向2的迭代器,输出关键值为2的信息。
if(it!=myMap.end())
    cout<<myMap->first<<","<<(*myMap).second<<endl;
  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值