std :: vector和std :: list内存布局

时间:2013-08-03 02:11:21

标签: c++ list memory vector stl

我们知道std :: vector给出了一个连续的内存布局,而std :: list给出了一个链接的内存布局,我的问题是std :: vector<的内存布局是什么? std :: list&gt ;?它是否包含std :: list的内容,或者它只包含几个指向列表的指针?

2 个答案:

答案 0 :(得分:3)

虽然std::list确实将其元素保存在作为链表的彼此连接的单独分配的内存位置中,但是列表本身的头结构需要一小块内存。在创建std::list<T>的实例时,会分配此结构。

std::list<T>的向量由单个链表的这些“标题”项组成,分配在连续的内存区域中:

Vector of Lists

答案 1 :(得分:1)

它与任何其他std::vector<T>相同(除非T=bool):它包含T数组。在这种情况下,它是std::list的数组。 std::list对象基本上是它“包含”的对象列表的簿记结构;实际元素在此结构之外的单独分配的块中(因此在std::vector<std::list<T> >管理的内存块之外)。

请注意std::vector并不关心T是什么,只要它是可复制的。原则上,您可以设计一个具有用于承载其他容器的特化的容器,但这不是std::vector的工作方式。