c++ - 判断 std::vector 是否已重新放置其数组的最佳方法是什么?

标签 c++ pointers vector

我正在使用 std::vector 来存储一个对象数组,这些对象被其他对象从 vector 外部引用。我画了个图解释的更清楚:

std::vector with objects being referenced

出于性能原因,我存储对象而不是指针。这些对象在我游戏的每一帧都进行了排序,因此我希望数组具有良好的缓存属性。

当然,无论何时将对象添加到 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/

相关文章:

vector - 在 Rust 中初始化向量的向量

c++ - 无符号整数的快速无分支最大值

c++ - Qt 中的垂直对齐

c - 局部结构和指针

pointers - 为什么 RBP 而不是另一个寄存器作为帧指针?

c - 将 char 数组传递给函数

c++ - 查找 C++ 矩阵中最大元素的索引?

c++ - 如何根据其值的属性对 vector 进行排序?

c++ - 在 if 语句中使用它

c++ - 循环失败