背景:我想实现一个三维碰撞检测算法,并希望将搜索空间分段为多维数据集,以便我只检查对象足够接近时的碰撞。
实际问题:我正在考虑使用向量数组来存储指向我要迭代的对象的指针。例如,box [0] [0] [0]将是一个向量,用于指向模拟空间一个角落中对象的指针。无论这是否是最佳解决方案,我想知道c ++如何处理向量数组。数组是否保持指向向量的指针,以便它们随后的重新分配对数组的有效性没有影响,或者是否会在数组内创建向量然后移出,导致未定义的行为?
类似问题没有针对此实施细节的具体答案。对不起,如果这实际上是在其他地方回答,我错过了。
答案 0 :(得分:1)
STL向量包含指向包含实际数据的堆缓冲区的指针。这允许向量根据需要调整缓冲区的大小,而不会使向量对象本身无效。 (见documentation of vector)
所以,回答你的问题。如果需要调整其中一个向量,则向量数组不会变为无效。如果需要调整其中一个向量,则向量指针数组也不会失效。
答案 1 :(得分:1)
在STL中,向量是动态数组的实现(可以在运行中驻留的数组)。这实质上意味着数组是动态分配的,并且用户获得指向堆上数组的指针。当需要更多空间时,分配一个新数组(通常是它的前一个大小的两倍),复制旧数组的内容并释放旧数组。这就是数据一致性的处理方式。
现在,当你有一个向量数组时,静态分配就像问题所示,你有内存(stack或.data部分,取决于你声明这个数组的位置)一个或3个向量对象,一个接一个地分配在内存中,每个都将保存指向堆上分配的数组的指针。
我希望这能回答你的问题。