acm实用小技巧

在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"
   这样就可以将多种数值转换成字符串



猜你喜欢

转载自crazymizzz.iteye.com/blog/2258688