1.主要内容:

Cxx Primer-chap3_字符串常量


2. 使用using声明符方便直接使用在命名空间中的实体:

Cxx Primer-chap3_字符串常量_02

,一些注意事项:

Cxx Primer-chap3_数组_03


3. 使用字符串字面量初始化时string 对象不会包含'\0'字符:

Cxx Primer-chap3_数组_04


4. companion types -- string::size_type

Cxx Primer-chap3_c++_05


5. 对于类型string而言,operator+要求至少有一个操作数类型为string

Cxx Primer-chap3_字符串常量_06


6. using the C++ versions of C Library headers:

Cxx Primer-chap3_初始化_07


7. 如果想要使用range for statement来修改容器:

Cxx Primer-chap3_c++_08


Cxx Primer-chap3_初始化_09


8. 对于vector而言,不可在range for中改变其size

Cxx Primer-chap3_字符串常量_10


9. 对于string类型而言,如果遍历所有字符,则用range for,如果只访问部分字符,则用下标操作符[] operatoriterator

Cxx Primer-chap3_字符串常量_11


10. 使用下标,程序员需要保证下标值在范围内:

Cxx Primer-chap3_数组_12


11. class template -(instantiation)- > class -(create an entity)-> object:

Cxx Primer-chap3_c++_13


12. list initialize:

Cxx Primer-chap3_c++_14

爆红但能运行:

Cxx Primer-chap3_数组_15


13. 多用empty vector而非固定的size

Cxx Primer-chap3_字符串常量_16


14. vector取下标操作operator[],其无法代替新增push_back()操作,同时多用range for而不是operator[]:

Cxx Primer-chap3_c++_17


15. 在library container中,iteratorssubscript operator(operator [])更加通用:

Cxx Primer-chap3_初始化_18


16. iterator类型是什么不重要,我们可以通过auto关键字推导:

Cxx Primer-chap3_c++_19

  1. 在容器中使用迭代器时使用!=/==而非<的原因是为了泛化考虑:
  2. nonconst容器的常规迭代器是iterator类型,反之具有const_iterator类型:,对于iterator到底是iterator还是const_iterator类型,在begin()end()我们可以手动指定:
  3. 通常(*it).item等价于it->item
  4. build-in array is a compound type:
  5. 字符数组可以用字符串常量进行初始化,这是因为C里面没有专门的type来存储字符串常量:,包括C++中的string也支持字符串常量和字符数组进行初始化。
  6. 数组可以由大多数类型的对象组成,此外因为数组本身也是一个对象,所以我们可以定义指向数组的指针以及数组引用:
  7. 在大部分情况下,在表达式中使用数组名时,编译器会自动将其转化成数组中第一个元素的地址:
  8. 严格来讲,没有多维数组这个type,只有数组的数组的 . . .: