C++ Primer 笔记——第三章 字符串、向量和数组

3.1 命名空间的using声明

  • 每个名字都需要独立的 using 声明。

3.2 标准库类型string

  • 执行读取操作时,string 对象会自动忽略开头的空白,从第一个真正的字符开始读起,直到遇到下一处空白为止。
  • 也可使用 getline(cin, VARIABLES) 来读取整行数据,以换行符为界(换行符也被读入)。
  • size 函数所返回的类型为 string::size_type,一般为无符号类型,所以在比较时需要使用避免使用有符号整型。
  • 把 string 对象和字符字面值混在一条语句中使用时,要保证每个加法运算符两边的对象至少有一个是 string 类型。(字符串字面值与 string 是不同的类型)
  • 处理 string 类型使用下标时,将下标类型设为 string::size_type 就不会出错。

3.3 标准库类型vector

  • 在对 vector 初始化时,若使用的是圆括号,则说明提供的值是用来构造该对象的,若使用花括号,则视为列表初始化。
  • 对于 vector 要使用 size_type 时要首先指定它是由哪种类型定义的。例如 vector::size_type;
  • 不能在范围 for 循环中向 vector 对象添加元素。

3.4 迭代器介绍

  • 如果容器为空,则 begin 和 end 返回的是同一个迭代器,即尾后迭代器。
  • begin 和 end 返回的具体类型由对象是否为常量决定,如果对象为常量,就返回 const_iterator 类型,如果不是,就返回 iterator。若对象非常量,但想获得 const_iterator 类型,则可以使用 cbegin 和 cend 实现(C++11)。
  • 任何一种可能改变 vector 对象容量的操作,都会使该 vector 对象的迭代器失效。

3.5 数组

  • 数组的大小确定不变,如果不确定元素的个数,要使用 vector。
  • 对于复杂的数组声明,建议从数组名字开始按照由内而外的顺序来阅读。
  • 在大多数表达式中,使用数组类型的对象其实是使用一个指向该数组首元素的指针。如一个数组作为一个 auto 变量 的初始值时,推断得到的类型是指针而不是数组。而当使用 decltype 关键字时,则会返回数组(包括数组类型与数组大小)。
  • 能使用合法的C风格的字符串为 string 对象初始化。同时 string 对象的加法运算允许合法的C风格字符串作为其中的一个对象,但不能两个都是。
  • 可以使用数组来初始化 vector 对象,其中以 begin(数组名) 来表示拷贝区域的首地址,以 end(数组名) 来表示尾后地址。

3.6 多维数组

  • 要使用范围 for 语句处理多维数组时,除了最内层的循环外,其他所有循环的控制变量都应该为引用类型,因为数组名往往会被转换成指针。
  • P116 练习3.43,明辨数据类型。

你可能感兴趣的:(C++ Primer 笔记——第三章 字符串、向量和数组)