【发布时间】:2012-09-16 03:16:35
【问题描述】:
是否存在类似于列表的 STL 容器,其中列表的元素不是连续存储的?这个容器的大小最多可以是 1000x1000 个元素,每个元素都是一个包含 36 个双精度数的向量。这将是一个大块存储在一起(如约 200 兆字节)。是否有一种变体将指向其内容的指针存储为单独的向量,以便允许随机访问。是否有一个已经存在的 STL 容器类,或者我应该手动存储指针?
我需要的容器实际上是一个恒定大小,所以我认为自己实现它不会太困难,但我想知道是否已经存在一个 STL 容器。我想避免使用向量,因为列表很大并且内容将是中等大小。如果容器中的向量不需要彼此相邻,那么将它们分隔在一个列表中以防止内存不足会更好吗?
【问题讨论】:
-
所以...你想要的是
std::array<std::unique_ptr<T>, length>? -
您关注
std::vector<T>或std::array<T, n>的哪方面的表现? -
好的,你不需要容器是连续的。这不是避免
vector或array的理由! -
在哪些方面类似于
list?在迭代器中快速插入/删除?元素永远不会重新定位?如果您只需要一个序列,那么标准序列(除了array)是vector、deque和list。就连续性而言,vector是连续的,deque不必是连续的,但它具有随机访问权限,对于中间插入/删除之类的操作,它不需要比原来更快,list是非连续性并保证非连续性的好处(和缺点)。 -
@MooingDuck:我不清楚外部容器必须持有一个向量:尽管提问者说它会,但人们勇敢地支持@987654334 @ 用于固定大小的行,所以我想介绍这种情况。但如果它确实持有
vector,则同意。在你开始用完总内存之前它不会变得非常大,所以它不会在最大尺寸上产生超过(比如说)2倍的差异。