常量引用std :: vector

时间:2011-07-14 21:00:28

标签: c++ stl vector stdvector

如何引用std :: vector中的特定元素?

简单的方法应该是将其存储为元素的索引(我使用的是size_t变量)。

我遇到的问题是在当前插入元素的可能性,使存储的值不正确。

3 个答案:

答案 0 :(得分:4)

没有一种非常好的方法可以通过指针,引用或索引跟踪vector内的单个元素。特别是:

  1. 如果在vector中插入新元素,则可能会导致vector元素的所有未完成引用在发生内部重新分配时失效。插入可以通过调用insertreservepush_backassign(或许还有其他几个)来实现。这可能导致引用引用无效对象,如果使用引用则会导致未定义的行为。

  2. 如果从vector中删除元素,则引用可能不再指向同一元素。访问引用可能会导致您引用错误的对象。

  3. 如果你真的必须拥有对vector中元素的引用,那么一个选项是将vector存储(智能)指针指向对象而不是对象本身。这样,您可以将该指针的副本存储在其他位置,无论vector中发生什么,指针仍应有效。这实际上是软件工程的基本定理 - 添加另一层间接可以解决大多数问题。

答案 1 :(得分:1)

唯一可靠的解决方案是让你的矢量成为指针的向量,并记住你的指针。

否则你无法维护引用,因为正如你所提到的,向量可能会移动元素。

答案 2 :(得分:0)

使用包含自动指针的向量,如果使用的是c ++ 0x,则为std::vector<std::unique_ptr<YOUR_ELEMENT_TYPE>>