正如answer to another question所指出的,由于底层连续缓冲区的重新分配,在将新元素添加到该向量之后,向量元素的所有指针都可能变为无效。
有没有一种安全的方法可以在编译时处理这个问题?
是否有最佳实践来处理或避免在更改数据结构后引用可能无效的情况?
答案 0 :(得分:1)
是否有最佳实践来处理或避免在更改数据结构后引用可能无效的情况?
std::list
哪种方式适合你,最好的方式取决于你的情况
答案 1 :(得分:-1)
std :: vector本身的指针或引用不会发生变化。由于重新分配策略是依赖于实现的,因此可以更改std :: vector内特定元素的地址。
预先分配足够的空间是一种风险,因为您不应该在特定的实施策略中进行转发。
在std :: vector中存储元素的地址是一个坏主意,并且可以很容易地避免,因为std :: vector []运算符非常快,因此存储索引而不是元素的地址。这是正确的方式。