如何引用std :: vector中的特定元素?
简单的方法应该是将其存储为元素的索引(我使用的是size_t变量)。
我遇到的问题是在当前插入元素的可能性,使存储的值不正确。
答案 0 :(得分:4)
没有一种非常好的方法可以通过指针,引用或索引跟踪vector
内的单个元素。特别是:
如果在vector
中插入新元素,则可能会导致vector
元素的所有未完成引用在发生内部重新分配时失效。插入可以通过调用insert
,reserve
,push_back
或assign
(或许还有其他几个)来实现。这可能导致引用引用无效对象,如果使用引用则会导致未定义的行为。
如果从vector
中删除元素,则引用可能不再指向同一元素。访问引用可能会导致您引用错误的对象。
如果你真的必须拥有对vector
中元素的引用,那么一个选项是将vector
存储(智能)指针指向对象而不是对象本身。这样,您可以将该指针的副本存储在其他位置,无论vector
中发生什么,指针仍应有效。这实际上是软件工程的基本定理 - 添加另一层间接可以解决大多数问题。
答案 1 :(得分:1)
唯一可靠的解决方案是让你的矢量成为指针的向量,并记住你的指针。
否则你无法维护引用,因为正如你所提到的,向量可能会移动元素。
答案 2 :(得分:0)
使用包含自动指针的向量,如果使用的是c ++ 0x,则为std::vector<std::unique_ptr<YOUR_ELEMENT_TYPE>>
。