正如answer to another question指出的引用,都指向一个向量的元素后,新的元素被添加到载体,由于底层连续的缓冲区的重新分配可能会变得无效。处理为受到添加元素为std :: vector的
是否有一个安全的处理在编译时这个问题呢?
是否有最佳实践,以应对或避免的情况,其中引用可以改变数据结构后失效?
正如answer to another question指出的引用,都指向一个向量的元素后,新的元素被添加到载体,由于底层连续的缓冲区的重新分配可能会变得无效。处理为受到添加元素为std :: vector的
是否有一个安全的处理在编译时这个问题呢?
是否有最佳实践,以应对或避免的情况,其中引用可以改变数据结构后失效?
对std :: vector本身的指针或引用不会改变。可能会改变的是std :: vector中特定元素的地址,这是由于依赖于实现的重新分配策略。
预分配足够的空间,是一个风险,因为你不应该在一个特定的政策执行中继。
存储在STD的元素的地址::向量是一个好主意,并可以很容易地避免,因为标准::矢量[]操作是非常快的,以便存储索引的元素,而不是地址。这是正确的方式。
这应该是一个评论,而不是一个答案。我认为可以肯定的是,这是OP的意思,它只是措辞不佳。 –
是否有最佳做法来处理或避免某种情况,在更改数据结构后引用可能会失效?预先
std::list
哪种方式会为你工作的最好方式在C#取决于你的情况
我会得到一个异常时,我添加元素而所迭代或者是活动的。我可以在C++中重新创建此行为吗? – wotanii
我可以告诉编译器在存储对向量中元素的引用时抛出错误吗?如果是这样,我可以通过总是通过索引获取元素来解决问题。 – wotanii