向量数组的C++实现

C++ implementation of an array of vectors

背景:我想实现一个 3-d 碰撞检测算法,并希望将搜索 space 分割成立方体,这样我只在以下情况下检查碰撞对象足够近。

实际问题:我正在考虑使用向量数组来存储指向我要迭代的对象的指针。例如,box[0][0][0] 将是一个向量,其中包含指向模拟 space 一个角落中的对象的指针。不管这是否是最佳解决方案,我想知道 c++ 如何处理向量数组。数组是否会保存指向向量的指针,以便它们随后的重新分配对数组的有效性没有影响,或者向量是否会在数组内部创建然后移出,导致未定义的行为?

类似的问题没有针对此实现细节的特定答案。抱歉,如果这在其他地方确实得到了回答,我错过了。

STL 向量包含指向包含实际数据的堆缓冲区的指针。这允许向量根据需要调整缓冲区的大小,而不会使向量对象本身无效。 (参见 documentation of vector

所以,回答你的问题。如果需要调整其中一个向量的大小,向量数组不会变得无效。如果需要调整其中一个向量的大小,指向向量的指针数组也不会变得无效。

在 STL 中,向量是动态数组(可以动态驻留的数组)的实现。这本质上意味着数组是动态分配的,用户在堆上得到一个指向数组的指针。当需要更多 space 时,将分配一个新数组(通常是其先前大小的两倍),复制旧数组的内容并释放旧数组。这就是处理数据一致性的方式。

现在,当你有一个向量数组,像问题显示的那样静态分配时,你在内存(堆栈或 .data 部分,取决于你声明这个数组的位置)中有一个或 3 个向量对象,分配一个之后另一个在内存中,每个都将保存一个指向堆上分配的数组的指针。

我希望这能回答你的问题。