我们知道std :: vector给出了一个连续的内存布局,而std :: list给出了一个链接的内存布局,我的问题是std :: vector<的内存布局是什么? std :: list&gt ;?它是否包含std :: list的内容,或者它只包含几个指向列表的指针?
答案 0 :(得分:3)
虽然std::list
确实将其元素保存在作为链表的彼此连接的单独分配的内存位置中,但是列表本身的头结构需要一小块内存。在创建std::list<T>
的实例时,会分配此结构。
std::list<T>
的向量由单个链表的这些“标题”项组成,分配在连续的内存区域中:
答案 1 :(得分:1)
它与任何其他std::vector<T>
相同(除非T=bool
):它包含T
数组。在这种情况下,它是std::list
的数组。 std::list
对象基本上是它“包含”的对象列表的簿记结构;实际元素在此结构之外的单独分配的块中(因此在std::vector<std::list<T> >
管理的内存块之外)。
请注意std::vector
并不关心T
是什么,只要它是可复制的。原则上,您可以设计一个具有用于承载其他容器的特化的容器,但这不是std::vector
的工作方式。