《C++ Primer》随记

1. Vector类型是快速增加的,定义一个空的再添加成员,比定义指定长度的集合操作更快。因此即此能预判成员数量也没必要定义长度。
2. 在for循环时直接判断Vector的size,因为size是内联函数,效率很高,没必要增加一个变量保存size再判断。
3. 在C++中循环Vector成员时使用!=size,而不推荐<size
4. 标准库中的string和直接字符串(如:"123")是两个不同的数据类型。
5. 现代C++中推荐使用vector代替数组,用string代替char数组,用迭代器实现同样功能的指向数组的指针。当只有在确定性能需要时才使用数组这种原始数据类型。
6. int a=2; 则if(a==true)是否定的,if (a)是肯定的。bool b = 2; 则if(b==true)是肯定的
7. int a=2+true;则a的值为3,在运算中true转换为1,false转换为0
8. 在for这类循环时,循环变量要用++i,而不是i++,因为i++需要先保存旧值再计算,比++i需更多的操作步骤,作者说如果i是int类型时编译器优化会节省这一步,但其他类型也许会付出相当大的代价。如果可以尽量用前置运算符。
9. 在函数参数传递时string和vector都会另复制一份传递,相当于值传递,如果不想复制则需要引用传递,如 vector &v。在在般情况下Vector作为参数传入时推荐使用迭代器传入(相当于引用传递)。
10.函数不能返回内部变量的引用,因为函数返回时这些局部变量会回收(说明:好在编译器会检查这个)
11.和普通函数不同,内联函数(inline)应该在头文件中定义。
12.顺序容器:vector和degue是内存顺序存储,可随机存储,但中间插入和删除慢(因为要移动元素),vector在尾端操作快,而degue两端操作都快。list则是链表存储,不能随机访问。适配器stack和queue使用默认窗口即可。
13.关联容器:map和multimap是key-value结构,set和multiset只能存储一个key值。key的要求是能进行大小比较操作,在容器中是按照key从小到大排序的

原文地址:https://www.cnblogs.com/81/p/2972540.html