C ++:大型动态数组结构很少改变大小,是否需要Vector?

时间:2015-07-01 09:23:28

标签: c++ arrays memory struct stdvector

我有很多大型的结构数组,并且数组的大小很少会在最大尺寸上发生变化,如果确实如此,它是可以接受的。

我想我应该有一个大的分配块,我可以继续编写并重写以下结构:

struct S{
    unsigned int A;
    unsigned int B;
};

在内存中,其中3个结构的数组应具有以下布局:

A,B,A,B,A,B.

而不是:

*A,*B,*A,*B,*A,*B.

也不应该是链接列表,因为我不需要知道一个条目何时结束而下一个条目何时开始。我的所有条目都是相同的大小,并且永远不会超过我在大块中分配的内容。还有大量的条目,因此每个元素的开销很小很重要。但是,每个数组/向量/列表的开销很好。

我已经看到了使用std::vector的建议,但从我收集的内容来看,每个元素都有一些开销,在这种情况下我不需要。

我应该在这里使用什么?如果动态数组是正确的,我可以只是:

S* arr = new S[x];

但是这个在调试器中显示为一个数组吗?

1 个答案:

答案 0 :(得分:8)

std::vector每个元素的开销为零,并且基本上是一个动态数组àlanew S[n],没有麻烦。它绝对是正确的工具。

请注意,为了在构建矢量时获得最佳性能,您可以使用reserve()