【发布时间】:2013-06-19 08:51:17
【问题描述】:
对于一个非常具体的应用程序,我想使用一个容器,其中包含可变大小的元素并且在内存中是连续的。基本原理是访问将主要是顺序的,因此将所有数据放在同一个线性数据结构中应该有助于缓存行为。
当然随机访问是不可能的,但数据结构应该使用矢量样式的push_back 方法动态调整大小。
这样的容器存在吗?怎么称呼?
编辑以解决 Arne Mertz 的评论:
我要表示的结构是一个图形。容器将包含节点列表,每个节点都有边列表,可能表示为指向其他(先前)节点的指针列表。
struct Node {
//various fixed size fields about the node itself
...
unsigned short n_edges;
Node * edges[n_edges]; // schematically
};
【问题讨论】:
-
@H2CO3 :我希望这些元素在内存中是连续的。我已经编辑了问题以使事情更清楚。
-
然后
std::vector。如果您想要连续的元素,那么这是一个具有O(1)访问和O(n)插入和删除的数组或向量。如果你想要O(1)插入和删除,那么这是一个链接列表,然后它有O(n)遍历,它在内存中不连续。你不能吃你的午餐和吃你的午餐,决定你想要哪一个。 -
具有可变元素的容器充其量很难实现。此外,您将很难对这些元素做任何事情,因为您不知道容器的第 N 个元素将具有什么类型。想到一件事
boost::variadic或支持类类型成员的 C++11 联合。无论如何都将难以实施。如果您告诉我们更多关于您的数据类型的信息,我们可以为您提供有关可能实施的更多详细信息。 -
这是评论,不是答案。好吧,也许评论太长了,好吧。
-
过早优化?
标签: c++ boost data-structures stl containers