C++ Primer chap6
1 为了提高效率 ,实际上vector 并不是随每一个元素的插入而增长自己, 而是当vector 需要增长自身时, 它实际分配的空间比当前所需的空间要多一些。
2 为了定义一个容器对象 我们必须先包含相关联的头文件 应该是下列头文件之一
#include <vector>
#include <list>
#include <deque>
#include <map>
#include <set>
容器对象的定义以容器类型的名字开始, 后面是所包含的元素的实际类型。例如
vector< string > svec;
const int list_size = 64;
list< int > ilist;
list< int > ilista( list_size );
3 iterator 是vector 类中定义的typedef ,以下语法
vector<string>::iterator
引用了vector 类中内嵌的iterator typedef ,并且该vector 类包含string 类型的元素 ,为了把每个string 元素打印到标准输出上
我们可以这样写
for( ; iter != iter_end; ++iter )
cout << *iter << '\n';
当然 这里*iter 的运算结果就是实际的string 对象
除了iterator 类型 每个容器还定义了一个const iterator 类型 后者对于遍历const 容器
是必需的 const iterator 允许以只读方式访问容器的底层元素
4 容器类的对象可以做插入,删除,对换等各种操作。
#include <algorithm> 包含了一些常用的泛型算法如find(), sort (), merge()等。
5 注意一个自己写程序的一个缺点,经常犯“见树木而不见森林”的错误。程序编译不通过,忙着去找语法的错误,从网上查资料,
原来是相应的头文件没有包含。删除链表节点时,无故多了一个节点,忙着打断点跟踪调试,原来错误在于前面有一句该删除的没删除,
递归函数算法是对的,但是运行结果却很奇怪,原来是递归错了,这都是“代码级”的错误,不是逻辑上的,而在于程序整体的把握。
所以以后细节上找不到错误,就从整体上靠,全面的检查一遍程序的流程。
6 C++对向量,链表,栈,队列及map和set的支持比较完善,编写上层应用程序时直接调用就ok了。