2

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

4

2 回答 2

3

尽管确实std::list将其元素保存在单独分配的内存位置中,并作为链表相互连接,但链表本身的标题结构需要一小块内存。当您创建std::list<T>.

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

列表向量

于 2013-08-03T02:18:11.940 回答
1

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

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

于 2013-08-03T02:27:32.333 回答