我需要一个固定大小的元素数组,并调用需要了解它们在内存中的放置方式的函数,特别是:
例如需要知道顶点在哪里、彼此之间的距离等的函数,如
glVertexPointer
。在我的情况下,顶点将是要存储的元素的成员。为了获得该数组中元素的索引,我更倾向于避免在我的元素内部设置一个
index
字段,而是通过指针算术来处理(即:Element *x
的索引将是x- &array[0]
)--顺便说一句,对我来说这听起来有些麻烦:这是好的做法还是应该做其他事情?
对于这个问题使用std::vector
安全吗?
某些东西让我认为std::array
更合适,但有以下方面需要考虑:
我结构体的构造函数和析构函数很少会被调用:我不介意这种开销。
我将设置
std::vector
的容量为我需要的大小(与使用std::array
的大小相同),因此不会有由于偶发重分配而产生的任何开销。我不介意
std::vector
内部结构的一些空间开销。我可以使用调整向量大小的能力(或更好地说:在设置期间选择大小),我认为这是没有办法使用std::array实现的,因为其大小是一个模板参数(太糟糕了:即使使用旧的类似C的数组也可以在堆上动态分配它)。
如果std::vector
适用于我的目的,我想详细了解与std::array
(或纯C数组)相比是否会有一些运行时开销:
glVertexPointer
之后最好不要调整向量的大小,除此之外就没问题了。 - Ben Voigt