1、概述
今天开始整理STL使用最广的容器了。同时这一部分也是我看了两遍,还有很多没有看懂的地方。最近准备硬着头皮,把这个山头给拿下,争取在第三遍能看懂吧。
容器,置物之所也。STL容器实际上就是把一些常用的数据结构给实现出来,方便大家使用。而常用的数据结构不外乎array、list、tree、stack、queue、hash table、set、map…等等。
根据 “数据在容器中的排列” 特性,这些数据结构可分为序列式和关联式两种。今天就整理部分序列式容器的内容。
2、序列式容器
所谓序列式容器,其中的元素都可序,但未必有序。C++语言本身提供了一个序列式容器array,STL另外提供了vector,list、deque、stack、priority-queue等等。今天就先整理vector。
2.1、vector实现
vector的数据安排以及操作方式,与array非常相似。两者唯一差别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变,需要更换更大的空间,需要客户端自己操作。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。
vector的大致结构如下:
template<class T, class Alloc = alloc> //使用默认的空间分配器
class vector
{
public:
//类型信息,我们之前整理的 trains 萃取技术,用于模板