C++primer 第三章笔记 初稿

3.1命名空间的using声明

作为一个好的设计,在头文件中应减少using声明;

3.2 string类型

  1. 读取未知数量的string对象常使用while循环;
  2. 范围for(引用符)结合cctype中的头文件,对字符串进行处理;
  3. 利用decltype(s.size()) 简化定义过程;
  4. 将size()函数值赋值给一个int型变量,实际上进行了隐式转换,因为size()返回值是无符号类型(小心溢出!)。
  5. 无论是string还是其他泛型编程,都应该多用!=判断是否越界,因为并非所有模板都重载了<运算符。

3.3 迭代器

  1. 什么是迭代器

    • 有时又称游标;
    • 可在容器上遍访的接口;
    • 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示;
    • 分离了容器与算法
  2. const迭代器

    • 是底层const
    • 通过cbegin(),cend()可以轻松获取;
  3. 任何改变容器的操作,都有可能改变迭代器,故应当重复调用获取迭代器函数而不是把它当做变量保存。

  4. 迭代器相减返回类型是difference_type,为带符号整型

3.4 数组

  1. 数组下标一般为size_t类型;
  2. 使用数组名为auto参数时,类型为数组类型的指针,而decltype为数组类型;
  3. 通过自带的begin()和end()函数可获取首尾指针;
  4. 指针的差为ptrdiff_t类型,为带符号整型;
  5. 可以用字符数组初始化string类对象,反之不行

    char s1[3]={'a','v','c'};
    char s2[]="avc";
    char *s3=s1;
  6. 没有多维数组,只有数组的数组,层数阅读由内到外;
  7. 下述代码不能通过,因为类型不匹配

    for (auto row : matrix)
    for (auto col : row)

    应该改为

    for (auto &row : matrix)
    for (auto col : row)
  8. 可以使用类型别名简化

    using int_array = int [4]
    int ia[3][4];
    for(int_array *p = ia; p!=ia+3; ++p)

你可能感兴趣的:(C语言)