STL容器总结
1.vector
vector的元素排列和操作方式与array很相似,不同的是vector是动态空间,能够随着元素的添加自动扩展空间。它的实现关键在于对大小的控制以及重新配置空间时移动元素的效率。
vector的iterator定义是value_type*,也就是普通的指针。因为vector维护的空间是一个连续线性空间,所以普通的指针就能满足vector迭代器的所有需求
vectord的构造与内存管理
vector的定义默认使用的是alloc作为空间配置器,并且为了方便以元素大小为配置单位定义了data_allocator。data_allocator::allocate(n)会分配n个元素空间大小,uninitialized_fill_n则会根据迭代器的型别特性(详见《STL源码剖析》笔记-迭代器iterators)选择效率较高的方式进行构造。
当使用push_back()将元素插入尾部时,会先检查是否有备用空间,如果有就直接在备用空间中构造,并调整迭代器finish。否则,就需要进行扩展空间,vector扩展空间的方式是申请新的空间,然后把原有的内容复制过来,然后释放原有空间,这是为了保证空间的连续性。因此,一旦发生了空间的扩展,原有的迭代器全都会失效,这点需要特别注意。
2.list
相较于vector的连续线性空间,list就复杂许多ÿ