C++ primer 笔记二
第3章 标准库类型
1.不论什么存储string的size操作结果的变量类型必须为string::size_type类型。
2.同理存储vector的size值应使用类似vector<string>::size_type的类型变量
3.使用for(vector<int>::size_type ix=0; ix != ivec.size(); ++ix)的风格 a.使用!=的效率更高 b.在循环过程中可能ivec的元素个数会变化,所以每次比較ivec.size()是一种更合理的做法 以。 c.C++有非常多小函数都是内联函数,所以多次调用ivec.size()产生的效率代价是非常小的
4.多认识了一个const迭代器:vector<int>::const_iterator,与vector<int>::iterator极像。仅仅是不能对得到的指针指向的对象进行改动。
5.两个迭代器相减(iter1-iter2)得到两者的距离
6.操作符::用于在其左操作数的作用域内找到其右操作数的名字。
7.size_t在cstddef头文件里定义的机器相关的无符号整型。该类型足以保存最大数组的长度。
第4章 数组和指针
8.未初始化的指针可能不为0。所以要尽量在声明的地方初始化。或在将其初始化为NULL即0,方便使用前推断是否已经初始化。
9.int &ri=ival, &ri2 = ival2; ri = r2; 结果是什么?将ival2的值赋给ival,引用未变化。
10.在处理C风格字符串时(即char数组)永远要记得字符串结束符为null(即'\0'),否则类似strlen()的结果不是确定的并且必将是错误的结果。包括strncpy等,但strlen的结果不包括结束符
11.使用C++标准库类型string则不会存在C风格字符串的问题,同一时候string的效率比C风格的也高。
12.c_str()返回的数组并不一直保持有效性。当string变量的内存分配不变化时,c_str()是一直有效的,可是假设在后面的操作中string变量的长度发生变化或其它一些情况发生,因内存的又一次分配。则已经保存的string.c_str()指针就可能变化,必须又一次调用c_str()返回新的地址.