博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++ Primer 读书笔记 Chapter 3 标准库类型

Posted on 2010-08-17 00:19  KurtWang  阅读(278)  评论(0编辑  收藏  举报
  1. string初始化方式
    1. string s1; 默认构造函数,s1为空串
    2. string s2(s1);将s2初始化为s1的一个副本
    3. string s3(“value“); 将s3初始化为一个字符串字面值副本
    4. string s4(n, ‘c’); 将s4初始化为字符'c’ 的n个副本
  2. 用getline读取整行
      string line;
      while(getline(cin, line))
      cout<<line<<endl;
      区别:C方式的getline:ssize_t getline(char **lineptr, size_t *n, FILE *stream); 注意:会保留行末的“\n”

      int main(void)
      {
      FILE * fp;
      char * line = NULL;
      size_t len = 0;
      ssize_t read;
      fp = fopen("/etc/motd", "r");
      if (fp == NULL)
      exit(EXIT_FAILURE);
      while ((read = getline(&line, &len, fp)) != -1) {
      printf("Retrieved line of length %zu :\n", read);
      printf("%s", line);
      }
      if (line)
      free(line);
      return EXIT_SUCCESS;
      }
  3. string操作:s.empty(), s.size() (返回string::size_type), s[n], s1+s2, s1=s2, s1==s2
    1. 注意:+的左右操作数必须至少有一个是string类型,因为+是string类型重载的运算符
  4. cctype头文件,适用于string对象的字符
    1. 例如isalnum(s[index])判定c是否是字母或数字,s是string类型,还有isalpha,isdigit, islower, isupper, ispunct, tolower, toupper, isspace
    2. C标准库头文件为name.h,对应的C++版本为cname
  5. vector是一个类模板,初始化方式如下
    1. vector<T> v1 默认构造函数v1为空
    2. vector<T> v2(v1) v2是v1的一个副本
    3. vector<T> v3(n,i) v3包含n个值为i的元素
    4. vector<T> v4(n) v4含有值初始化的元素的n个副本,例如vector<int> fvec(10) //10 elements, each init to 0
  6. vector下标操作不添加元素(与map不同,map[0]=1 会检查map中是否有key为0的值,如果没有则插入(0,1))
  7. C++程序员习惯:优先选用!=而不是<来编写循环判断条件(因为容器经常使用first!=end来判断iter是否遍历完),在for循环中调用size函数而不是保存它的值(这是因为容器会动态增长)
  8. 迭代器
    1. 定义为容器名<元素类型>::iterator,例如vector<int>::iterator iter;
    2. end()不指向任何元素,如果容器为空,begin和end相同
    3. 自增表示下一个元素(不能对end进行自增和解引用)
    4. const_interator: 不能改写元素,例:vector<string>::const_interator iter = text.begin(); *iter=””;(错)iter++;(对)
    5. const iterator: 不能指向其他元素,例:const vector<int>::iterator cit = num.begin(); *cit=0;(对)cit++;(错)
    6. 迭代器的距离类型是difference_type
    7. 任何改变vector长度的操作都会使所有已存在的迭代器失效
  9. bitset 初始化
    1. bitset<n> b; n位,全为0
    2. bitset<n> b(u); b是unsigned long型u的一个副本;例:bitset<32> bitvec(0xffff) bits0-15 are set to 1; 16-31 are set to 0
    3. bitset<n> b(s); b是string对象中含有位串的副本;例:bitset<32> bitvec(“1100”); bitvec is 001100000。。。。00000,string和bitvec是反向转化的
    4. bitset<n> b(s, pos, n); b是从s中从位置pos开始的n个位的副本
  10. bitset操作
    1. any(是否存在1); none (是否全为0)
    2. count 1的个数; size 位数
    3. b[pos]
    4. b.test(pos) 判断pos是否为1
    5. b.set() 全置1 ;b.set(pos) pos置为1
    6. b.reset() 全置0 ;b.reset(pos) pos置为0
    7. flip 取反;flip(pos) pos取反
    8. b.to_ulong() 返回一个unsigned long值