wenlong1423
7/2/2014 - 10:53 AM

C++ Primer第5版 学习笔记 第三章.md

###C++ Primer第5版 学习笔记

####第三章

  1. string::size返回string::size_type类型,体现标准库机器无关,结果与有符号数运算时要谨慎
  2. vector int初始化与range for
   using vi = vector<int>;
   vi v1(5);
   vi v2(5,8);
   vi v3{9};
   vi v4{9,7};
   auto vv{v1,v2,v3,v4};
   for(auto&& i1: vv) {
       for(auto&& i2 : i1) {
           cout << i2 << " ";
       }
       cout << ", ";
   }
//0 0 0 0 0 , 8 8 8 8 8 , 9 , 9 7 , 
  1. vector string 初始化 vs ("sssss");不合法
  2. 范围for语句体内不应改变遍历序列的大小
  3. const_iterator 是底层 const, cbegin 和 cend 返回 const_iterator
  4. string 和 vector 带有 difference_type 用于存储迭代器之间的距离
  5. 数组下表通常使用 size_t 是机器相关的无符号类型
  6. 指针相减为 ptrdiff_t 类型, 无符号,机器相关
  7. 对数组,auto 与 decltype 结果不同
int ia[10] = {0,1,2,3,4,5,6,7,8,9};
auto ia2(ia);//ia2是指向ia第一个元素的int指针
//相当于auto ia2(&ia[0]);
decltype ia3 = {0,1,2,3,4,5,6,7,8,9};//ia3是10维度的 int 数组
ia3[0] = 10;
  1. begin 和 end 函数返回数组的头,尾后指针
int ia[] = {1,2,3};
int *beg = begin(ia);
int *end = end(ia);
  1. 下标和指针
    1. p[2] 相当于*(p+2)
    2. 因此内置的下标运算符可以处理负值,而标准库限定的必须是无符号类型
  2. C风格字符串不是类型,而是为了表达和使用字符串而形成的写法
  3. string::c_str返回的数组不一定一直有效,改变 string 可能会使之前的数组失效,应尽快复制
  4. 用数组初始化 vector vi ivec(begin(int_arr), end(int_arr));
  5. 多维数组嵌套范围 for 语句结合 auto引用 遍历.