2017-01-09 34 views
2

正如answer to another question指出的引用,都指向一个向量的元素后,新的元素被添加到载体,由于底层连续的缓冲区的重新分配可能会变得无效。处理为受到添加元素为std :: vector的

是否有一个安全的处理在编译时这个问题呢?

是否有最佳实践,以应对或避免的情况,其中引用可以改变数据结构后失效?

+0

我会得到一个异常时,我添加元素而所迭代或者是活动的。我可以在C++中重新创建此行为吗? – wotanii

+0

我可以告诉编译器在存储对向量中元素的引用时抛出错误吗?如果是这样,我可以通过总是通过索引获取元素来解决问题。 – wotanii

回答

-1

对std :: vector本身的指针或引用不会改变。可能会改变的是std :: vector中特定元素的地址,这是由于依赖于实现的重新分配策略。

预分配足够的空间,是一个风险,因为你不应该在一个特定的政策执行中继。

存储在STD的元素的地址::向量是一个好主意,并可以很容易地避免,因为标准::矢量[]操作是非常快的,以便存储索引的元素,而不是地址。这是正确的方式。

+0

这应该是一个评论,而不是一个答案。我认为可以肯定的是,这是OP的意思,它只是措辞不佳。 –

1

是否有最佳做法来处理或避免某种情况,在更改数据结构后引用可能会失效?预先

  • 预分配足够的空间矢量
  • 在阵列的代替参考对象的
  • 保持索引/指针本身对象
  • 使用不同的容器中,例如std::list

哪种方式会为你工作的最好方式在C#取决于你的情况

相关问题