如何在std :: vector中引用特定元素?常量引用std :: vector
简单的方法应该是将其存储为元素的索引(我正在使用size_t变量)。
我遇到的问题是在当前插入元素的可能性,使存储的值不正确。
如何在std :: vector中引用特定元素?常量引用std :: vector
简单的方法应该是将其存储为元素的索引(我正在使用size_t变量)。
我遇到的问题是在当前插入元素的可能性,使存储的值不正确。
唯一可靠的解决方案是让你的矢量是一个指针矢量,只记住你的指针。
否则,你不能保持一个引用,因为,正如你所提到的,向量可能会移动元素。
通过指针,引用或索引来跟踪vector
中的单个元素的方法并不是很好。特别是:
如果你插入一个新元素到vector
,它可能会导致在发生内部重新分配到无效的vector
的元素的所有未完成的引用。插入可以通过调用insert
,reserve
,push_back
或assign
(可能还有其他几个)来实现。这可能会导致引用引用无效的对象,如果使用该引用,则会导致未定义的行为。
如果您从vector
中删除元素,则引用可能不再指向同一元素。访问参考可能会导致您引用错误的对象。
如果你真的必须持有一个vector
一个元素的引用,其中一个方案是有vector
店(智能)对象的指针,而不是对象本身。这样,您可以在其他地方存储该指针的副本,而不管vector
中发生了什么,指针应该仍然有效。这实际上是软件工程的基本定理 - 增加另一层间接寻址可以解决大多数问题。
使用包含自动指针的向量,即如果您使用C++ 0x,则使用std::vector<std::unique_ptr<YOUR_ELEMENT_TYPE>>
。
也许'std :: vector'不是您需要的正确容器。你想做什么? –
@Fred Larson @templatetypedef我不想指出元素本身,我想指出它的位置。我创建的是一个在多边形中使用布尔操作的算法,我需要找到两个多边形之间的交点,并知道一个在另一个多边形中的相同位置,所以我可以从一个多边形跳到另一个多边形。我想到std :: list,但我不知道它是否允许我做这样的事情。 – Wanderson