【发布时间】:2011-05-30 08:58:47
【问题描述】:
我需要有一个固定大小的元素数组并调用它们需要知道它们如何放置在内存中的函数,特别是:
像
glVertexPointer这样的函数,需要知道顶点在哪里,它们之间的距离等等。在我的例子中,顶点是要存储的元素的成员。
1234563
x - & array[0]) -- 顺便说一句,这对我来说听起来很肮脏:这是一种好习惯还是我应该做其他事情?
为此使用std::vector 是否安全?
有些事情让我觉得std::array 更合适,但是:
我的结构的构造函数和析构函数很少被调用:我不介意这样的开销。
-
我要将
std::vector容量设置为我需要的大小(用于std::array的大小,因此不会因零星重新分配而产生任何开销。 我不介意
std::vector的内部结构需要一点空间开销。我可以使用调整向量大小的能力(或者更好:在设置过程中选择大小),我认为 std::array 无法做到这一点,因为它的大小是模板参数(太糟糕了:即使使用类似 C 的旧数组,我也可以做到这一点,只需在堆上动态分配它)。
如果 std::vector 适合我的目的,我想详细了解它是否会对 std::array(或普通 C 数组)产生一些运行时开销:
我知道一旦我增加它的大小,它就会为任何元素调用默认构造函数(但我想如果我的数据有一个空的默认构造函数,这不会花费任何成本?),析构函数也是如此。还有什么?
【问题讨论】:
-
在调用
glVertexPointer之后最好不要调整向量的大小。除此之外,一切都会好的。 -
Convert std::vector to array 的可能重复项
标签: c++ arrays stl vector containers