内容会持续更新,有错误的地方欢迎指正,谢谢!
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;