some of紫书笔记

例题5-5 UVa12096

  1. 长且不重复的指令只读第一个字母
  2. 将难以存储的实体哈希化,分配一个ID
  3. typedef 是个好东西
  4. set_union(x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(x, x.end()))
    使用宏定义#define ALL(x) x.begin(),x.end()和定义#define INS(x) inserter(x,x.begin())可以把一堆参数简写为set_union(ALL(x),INS(x));

例题5-7 Uva136

  1. 优先队列是排序不去重的,如果要去重,和队列同时写个set,对每个入队元素检查set里的count
  2. prioritry_queue<int, vector, greater >pq;中两个>>不要连在一起,会使得编译器误认为是>>运算符
  3. 优先队列最先出队列的元素是队列中优先级最高的元素(top()取队首元素),默认为大数优先
    1. prioritry_queue<int, vector, greater >pq ,小数优先
    2. prioritry_queue<int, vector, cmp> >pq; // 然后重载'()'运算符
      struct cmp{
      bool operactor()(const int a,const int b) const{
      return a%10<b%10;//如果a的优先级比b小,则返回ture
      }
      }
  4. push(),pop(),top()

随机数发生器

  1. rand()不仅是伪随机数,而且生成范围是[0,RAND_MAX],而RAND_MAX 一般为2^15-1;
  2. 虽然可以执行srand(time(NULL)),但是由于time的精度是秒,所以会导致一秒钟内多次执行的程序随机出同样的结果

引用传参方式(&)可以减少指针的应用

测试程序

  1. 测试程序中常用assert(表达式)当表达式为假时强行终止程序,并给出错误提示
  2. abort()
    立即终止当前进程,产生异常程序终止
    进程终止时不会销毁任何对象
  3. exit
    exit