C++:很少改变大小的大型动态结构数组,是否需要 Vector?
C++: Large dynamic array of structs that rarely changes size, Is Vector necessary?
我有很多大型结构数组,数组的大小很少会改变最大大小,即使发生改变也是可以接受的。
我想我应该有一个大的分配块,我可以继续编写和重写以下结构:
struct S{
unsigned int A;
unsigned int B;
};
在内存中,由 3 个这些结构组成的数组应具有以下布局:
A,B,A,B,A,B.
而不是:
*A,*B,*A,*B,*A,*B.
它也不应该是链表,因为我不需要知道一个条目何时结束和下一个条目何时开始。我所有的条目都是相同的大小,并且永远不会超过我在一个大块中分配的内容。还有大量的条目,因此每个元素的开销尽可能小很重要。不过,每个 array/vector/list 的一些开销是可以的。
我看到了使用 std::vector
的建议,但据我所知,它对每个元素都有一些开销,在这种情况下我不需要。
我应该在这里使用什么?如果动态数组是合适的,我可以:
S* arr = new S[x];
还要在调试器中将其显示为数组吗?
std::vector
每个元素的开销为零,本质上是一个动态数组 à la new S[n]
,没有麻烦。这绝对是正确的工具。
请注意,为了在构造向量时获得最佳性能,您可以使用 reserve()
。
我有很多大型结构数组,数组的大小很少会改变最大大小,即使发生改变也是可以接受的。
我想我应该有一个大的分配块,我可以继续编写和重写以下结构:
struct S{
unsigned int A;
unsigned int B;
};
在内存中,由 3 个这些结构组成的数组应具有以下布局:
A,B,A,B,A,B.
而不是:
*A,*B,*A,*B,*A,*B.
它也不应该是链表,因为我不需要知道一个条目何时结束和下一个条目何时开始。我所有的条目都是相同的大小,并且永远不会超过我在一个大块中分配的内容。还有大量的条目,因此每个元素的开销尽可能小很重要。不过,每个 array/vector/list 的一些开销是可以的。
我看到了使用 std::vector
的建议,但据我所知,它对每个元素都有一些开销,在这种情况下我不需要。
我应该在这里使用什么?如果动态数组是合适的,我可以:
S* arr = new S[x];
还要在调试器中将其显示为数组吗?
std::vector
每个元素的开销为零,本质上是一个动态数组 à la new S[n]
,没有麻烦。这绝对是正确的工具。
请注意,为了在构造向量时获得最佳性能,您可以使用 reserve()
。