在acm题目中经常会有十分麻烦的问题,有时候这些问题可以用一些已有的方法进行解决,不需要自己写算法。所以我在这里记录下来,也是作为学习笔记。
一、memset 头文件 cstring
这个函数可以用来初始化,例如:
int x[100];
memset(x,0,sizeof(x));
二、c++中string类的用法
getline(istream &in,string &s);用来把一行的内容写入s中
find(char *c, int pos = 0);从pos开始查找字符c在当前字符串的位置,返回值为字符c的位置,若找不到,返回值为 string::npos
insert(int pos, const char *s);从pos位置插入字符串s
erase(int pos = 0, int n = npos);删除pos开始的n个字符,返回修改后的字符串
三、sort 函数 头文件 algorithm
sort可以对任意对象进行排序
在数组中,用sort(a,a+n)调用
在vector中,用sort(v.begin(),v.end())调用
四、set 集合 头文件 set
set中元素已从小到大排好序,且集合中相同元素最多只出现一次
五、map 映射 头文件 map
map就是从键(key)到值(value)的映射,且重载了[]运算符,
可以用 map<string,int> name_id 来表示名字到id的映射
可以用 name_id["mzh"]=25 这样的方式赋值
六、栈、队列和优先队列
栈:符合 后进先出 规则的数据结构 有push和pop两种操作 头文件 stack
队列:符合 先进先出 的公平队列 头文件 queue 用push和pop进行入队和出队操作
七、随机生成
cstdlib 中的 rand 函数可以生成一个[0,RAND_MAX]闭区间内的均匀随机整数
可以用rank()%n 产生一个 [0,n-1]内的随机整数
需要随机数的程序在最开始时要执行一次 srand(time(NULL)),目的是初始化“随机数种子”,而不可以多次调用
八、断言
assert 宏
用法是 assert(表达式) 当表达式为假时强行终止程序,并给出错误提示。
九、用stringstream完成数据转换 头文件 sstream
stringstream可以用来把string类型的字符串转换成int
例如:string s("12345");
int x=1; //x=1
stringstream ss(s);
ss>>x; //x=12345
也可以
string s("12345");
int x=1; //x=1
stringstream ss;
ss<<s;
ss>>x; //x=12345
还可以用str()的方法:
typename x=5.222;
cin>>x;
stringstream ss;
ss<<x;
string s;
s=ss.str(); //s="5.222"
这样就可以将多种数值转换成字符串
acm实用小技巧
猜你喜欢
转载自crazymizzz.iteye.com/blog/2258688
今日推荐
周排行