一、内存映像
容器在概念上是一种可以动态增大或减小的模型,所以其元素在实现上不可能直接保存在容器对象里,而应该保存在自由内存或堆上。这里要区分两个概念“容器对象”和“容器元素对象”。容器本身就是一个C++对象,其大小在运行时是不可以改变,因此容器应该有办法指示其每一个元素在内存中的位置,以便用户能通过容器对象找到其中的元素对象。
二、存储方式和访问方式
向量和链表是两种最基本的动态结构,也是STL中两种最基本的容器,分别对应动态数组和链表结构,同时他们分别代表了内存中同类型批量数据存放的两种基本方式:连续存储和随机存储(不连续存储)。
不同的存储方式决定了不同的访问方式,顺序访问和随机访问。所谓的随机访问是指通过开销恒定的算数运算来得到任一元素的内存地址的访问方法。而顺序访问则是指从第一个元素开始遍历,直到找到所需的元素为止。C++/C的内置数组和vector既可以随机访问也可以顺序访问的容器,而list则只能顺序访问。
只要底层存储机制采取连续存储方式的容器,就可以随机访问其中任一元素,否则只能顺序访问,任何容器都能顺序访问。
三、容器的分类