常量引用std::vector

Constant reference std::vector

本文关键字:vector std 引用 常量      更新时间:2023-10-16

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

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

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

没有一种很好的方法可以通过指针、引用或索引来跟踪vector中的单个元素。特别是:

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

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

如果您确实必须在vector中保存对元素的引用,一种选择是让vector存储指向对象的(智能)指针,而不是对象本身。这样,您就可以在其他地方存储该指针的副本,并且无论vector中发生了什么,该指针都应该仍然有效。在实践中,这确实是软件工程的基本定理——添加另一层间接可以解决大多数问题。

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

否则不能维护引用,因为正如前面提到的,vector可能会移动元素。

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

相关文章: