如何知道何时重新分配向量的内部数组?

qdi*_*dii 3 c++ std stdvector

我有一个std::vector包含很多元素.由于向量很大,我将指针存储到另一个向量中的某些特定元素,以便能够更快地访问它们.但是随着向量的增长,有时它的内部容器会被重新分配,导致我的所有指针都变得无效.

有没有办法知道这种情况何时发生?这样我就可以更新其他列表中的指针.

LeG*_*GEC 6

你不应该存储指针,你应该存储索引:

即,而不是:

var1 = &vector[0];
var2 = &vector[13];
Run Code Online (Sandbox Code Playgroud)

和访问*var1,*var2

你应该存储:

i1 = 0;
i2 = 13;
Run Code Online (Sandbox Code Playgroud)

和访问vector[i1],vector[i2]


注意:如果使用修饰符方法,您仍应小心:

  • pop_back() (这使得最后一个位置无效)
  • erase(i) (它将所有索引都移动到大于i)
  • 等......

(你的第一种方法有同样的警告)