我正在使用 std::vector
来存储一个对象数组,这些对象被其他对象从 vector 外部引用。我画了个图解释的更清楚:
出于性能原因,我存储对象而不是指针。这些对象在我游戏的每一帧都进行了排序,因此我希望数组具有良好的缓存属性。
当然,无论何时将对象添加到 vector 中,数组都有可能被重新安置。在那种情况下,我的引用无效并且需要更新。现在,为了检测重新安装,我使用以下方法:
size_t old_capacity = v.capacity();
// Do stuff that could change the vector's size
v.push_back(a);
v.push_back(b);
v.push_back(c);
if (old_capacity != v.capacity()) {
update_references();
}
我的问题是:
- 这是检测 vector 已重新放置其阵列的最佳方法吗?
- 我是否还需要在执行
pop_back
后检查是否重新安装?
最佳答案
在我看来,最好的方法如下:只需使用指向 vector 头部的指针。并非所有重新分配都会导致 vector 移动。
但是,我或多或少同意关于对您的 vector 的引用的评论。此外,您可以使用 std::list,它不会出现重新分配问题。
std::vector<int> v;
void *old_location = (void *) &(v.front());
v.push_back(3);
v.push_back(3);
v.push_back(3);
if (old_location != &(v.front()))
update_references();
关于c++ - 判断 std::vector 是否已重新放置其数组的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400492/