我有一个std::vector包含很多元素.由于向量很大,我将指针存储到另一个向量中的某些特定元素,以便能够更快地访问它们.但是随着向量的增长,有时它的内部容器会被重新分配,导致我的所有指针都变得无效.
有没有办法知道这种情况何时发生?这样我就可以更新其他列表中的指针.
你不应该存储指针,你应该存储索引:
即,而不是:
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)(你的第一种方法有同样的警告)