通过向std :: vector添加元素来处理受影响的引用

时间:2017-01-09 14:26:40

标签: c++ vector reference compiler-warnings stdvector

正如answer to another question所指出的,由于底层连续缓冲区的重新分配,在将新元素添加到该向量之后,向量元素的所有指针都可能变为无效。

有没有一种安全的方法可以在编译时处理这个问题?

是否有最佳实践来处理或避免在更改数据结构后引用可能无效的情况?

2 个答案:

答案 0 :(得分:1)

  

是否有最佳实践来处理或避免在更改数据结构后引用可能无效的情况?

  • 预先为vector提供足够的空间
  • 将对象的索引保留在数组中而不是引用/指向对象本身
  • 使用不同的容器,例如std::list

哪种方式适合你,最好的方式取决于你的情况

答案 1 :(得分:-1)

std :: vector本身的指针或引用不会发生变化。由于重新分配策略是依赖于实现的,因此可以更改std :: vector内特定元素的地址。

预先分配足够的空间是一种风险,因为您不应该在特定的实施策略中进行转发。

在std :: vector中存储元素的地址是一个坏主意,并且可以很容易地避免,因为std :: vector []运算符非常快,因此存储索引而不是元素的地址。这是正确的方式。