[英]Constant reference std::vector
如何引用 std::vector 中的特定元素?
简单的方法应该是将其存储为元素的索引(我使用的是 size_t 变量)。
我遇到的问题是在当前元素之前插入元素的可能性,使存储的值不正确。
没有一种很好的方法可以通过指针、引用或索引来跟踪vector
内的单个元素。 尤其是:
如果将新元素插入到vector
中,如果发生内部重新分配,可能会导致对vector
元素的所有未完成引用无效。 插入可以通过调用insert
、 reserve
、 push_back
或assign
(可能还有其他一些)来发生。 这可能会导致引用引用无效的 object,如果使用引用会导致未定义的行为。
如果从vector
中删除一个元素,则引用可能不再指向同一个元素。 访问参考可能会导致您引用错误的 object。
如果您确实必须在vector
中保存对元素的引用,则一种选择是让vector
存储(智能)指向对象的指针,而不是对象本身。 这样,您可以将该指针的副本存储在其他地方,并且无论vector
中发生什么,该指针都应该仍然有效。 这确实是实践中软件工程的基本定理——添加另一层间接可以解决大多数问题。
唯一可靠的解决方案是让你的向量成为一个指针向量并记住你的指针。
否则,您将无法维护引用,因为正如您所提到的,向量可能会移动元素。
如果您使用的是 c++0x,请使用包含自动指针的向量,即std::vector<std::unique_ptr<YOUR_ELEMENT_TYPE>>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.