本文源码以GNU2.9编译器为例展开说明,同时参考一下GNU4.9的部分源码。
1 vector内存结构和源码 1.1 vector内存结构和GNU2.9源码结构 1.2 GNU4.9源码结构 1.2.1 GNU4.9源码结构 1.2.2 GNU4.9源码 2 vector内存二次分配原理以push_back()函数为例分析vector内存的二次分配原理。
2.1 vector内存分配的整体流程 2.2 当空闲空间不够时的二次分配流程注意:vector的两倍增长前后,不仅要大量调用拷贝构造函数,而且还需要大量析构函数,用以释放原来vector占用的内存空间。所以,如果vector内存分配不当,容器出现bad_alloc错误。
3 vector迭代器 3.1 GNU2.9迭代器因为vector是一个连续空间,在GNU2.9中没有将其迭代器iterator封装为一个class类,直接使用泛型T的指针作为vector迭代器。
在GNU4.9中,vector的迭代器本质上还是一个指针,不过被封装成了一个类。
- 侯捷《STL标准库和泛型编程》



