第二章
1.为了兼容C语言,C++中所有的字符串字面值都有编译器自动在末尾添加一个空字符。
2.引用是一种复合类型,通过在变量名前添加“&”符号来定义。复合类型是指用其他类型定义的类型。引用必须用与该引用同类型的对象初始化。
因为引用只是它绑定的对象的另个名字,作用在引用上的所有操作事实上都是作用在该引用绑定的对象上。
当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。不可能将引用绑定到另个一对象。
初始化是指明引用指向哪个对象的唯一方法。const引用是指向const对象的引用。const引用可以初始化为不同类型的对象或者初始化为右值。
非const引用只能绑定到与该引用同类型的对象。const引用则可以绑定到不同但相关的类型的对象或绑带到右值。
第三章
1.警告:标准库string类型和字符串字面值
因为历史原因以及为了与C语言兼容,字符串字面值与标准库string类型不是同一种类型。
当进行string对象和字符串字面值混合链接操作时,+操作符的左右操作数必须至少有一个是string类型的。
建议:采用C标准库头文件的C++版本。
C++标准库除了定义了一些特定于C++的设施外,还包括C标准库。C++zhong的头文件cctype其实就是利用的C标准库函数,这些库函数就定义在C标准库的ctype.h头文件中。
C标准库头文件命名形式为name.h,而C++版本则命名为cname,少了后缀.h而在头文件名前加了c。c表示这个头文件源自C标准库。因此,cctype与ctype.h的内容是一样的,只是采用了更适合C++程序的形式。特别地,cname头文件中定义的名字都定义在命名空间std内,而.h版本中的名字却不是这样。
2. vector不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector类型的每一种都指定了其保存元素的类型。因此,vector<int>和vector<string>都是数据类型。
vector对象(以及其他标准库容器对象)的重要属性就在于可以在运行时高效地添加元素。因为vector增长的效率高,当元素值已知时,最好是通过动态地向它添加元素来让它增长。
vector类型总是包括vector的元素类型。 vector<int>::size_type (true);vector::size_type (false)
必须是已存在的元素才能用下标操作符进行引用。通过下标操作进行赋值时,不会添加任何元素。
3. 迭代器是一种检查容器内元素并遍历元素的数据类型。
所有的标准库容器都定义了相应的迭代器类型而只有少数的容器支持下标操作。
另一对可执行于迭代器的操作就是比较:用==或!=操作符来比较两个迭代器,如果两个迭代器对象指向同一个元素,则它们相等,否则就不相等。
每种容器类型还定义了一种名为const_iterator的类型,该类型只能用于读取容器内元素,但不能改变其值。当对const_iterator类型解引用时,返回的是一个const值。不允许用const_iterator进行赋值。
不要把const_iterator对象与const的iterator对象混淆起来,声明一个const迭代器时,必须初始化迭代器。一旦初始化后,就不能改变它的值。
迭代器算术操作:加或减之后的结果必须指向iter所指vector中的某个元素,或是vector末端的后一个元素。
任何改变vector长度的操作都会是已存在的迭代器失效。例如,在调用push_back之后,就不能再信赖指向vector的迭代器的值了。
4.bitset的构造函数类似于vector,bitset类是一种类模板;而与vector不一样的是bitset类型对象的区别仅在其长度而不在器类型。
以0位开始的位串是低阶位。
当用string对象初始化bitset对象时,string对象直接表示为位模式。从string对象读入位集的顺序是从右向左的。
第四章
1. 通常,由于C风格字符串与字符串字面值具有相同的数据类型,而且都是以空字符null结束的,因此可以把C风格字符串用在任何可以使用字符串字面值的地方:
*可以使用C风格字符串对string对象进行初始化或赋值。
*string类型的加法操作需要两个操作数,可以使用C风格字符串作为其中的一个操作数,也允许将C风格字符串用做复合赋值操作的饿右操作数。
反之则不成立:在要求C风格字符串的地方不可直接使用标准库string类型对象。char *str=st2; (false)
string类型提供了一个名为c_str的成员函数,以实现我们的要求:char *str=st2.c_str(); (true)
c_str函数返回C风格字符串,其字面意思是:“返回C风格字符串的表示方法”,即返回指向字符数组首地址的指针,该数组存放了与string对象相同的内容,并且以结束符null结束。c_str返回的指针指向const char类型的数组。
2使用数组初始化vector元素
C++运行使用数组初始化vector对象,尽管这种初始化形式起初看起来有点陌生。使用数组初始化vector对象,必须指出用于初始化式的第一元素以及数组最后一个元素的下一位置的地址:
const size_t arr_size=6;
int int_arr[arr_size]={0,1,2,3,4, 5};
vector<int> ivec(int_arr, int_arr+arr_size);
传递给ivec的两个指针标出了vector初值的范围。第二个指针指向被复制的最后一个元素之后的地址空间。