C++ 恒定参考标准向量

C++ 恒定参考标准向量,c++,stl,vector,stdvector,C++,Stl,Vector,Stdvector,如何在std::vector中引用特定元素 最简单的方法应该是将其存储为我使用的size\t变量元素的索引 我遇到的问题是,可能会在当前值之前插入一个元素,从而使存储的值不正确。唯一可靠的解决方案是让向量成为指针向量,并记住指针 否则,您无法维护引用,因为正如您所提到的,向量可能会移动元素。唯一可靠的解决方案是将向量作为指针向量,并记住指针 否则,您无法维护引用,因为正如您所提到的,向量可能会移动元素。没有很好的方法通过指针、引用或索引跟踪向量中的单个元素。特别是: 如果在向量中插入新元素,如果

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

最简单的方法应该是将其存储为我使用的size\t变量元素的索引


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

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


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

唯一可靠的解决方案是将向量作为指针向量,并记住指针


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

没有很好的方法通过指针、引用或索引跟踪向量中的单个元素。特别是:

如果在向量中插入新元素,如果发生内部重新分配,可能会导致对向量元素的所有未完成引用无效。插入可以通过调用insert、reserve、push_back或assign加上其他一些方法进行。这可能会导致引用引用无效对象,如果使用引用,则会导致未定义的行为

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


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

通过指针、引用或索引跟踪向量中的单个元素不是一个很好的方法。特别是:

如果在向量中插入新元素,如果发生内部重新分配,可能会导致对向量元素的所有未完成引用无效。插入可以通过调用insert、reserve、push_back或assign加上其他一些方法进行。这可能会导致引用引用无效对象,如果使用引用,则会导致未定义的行为

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


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

使用包含自动指针的向量,即std::vector(如果使用c++0x)。

使用包含自动指针的向量,例如,如果您使用的是c++0x,则使用std::vector。

可能std::vector不适合您的需要。你想做什么?@Fred Larson@templatetypedef我不想指向元素本身,我想指向它的位置。我正在创建的是一个用于多边形中布尔运算的算法,我需要找到两个多边形之间的交点,并知道其中一个多边形在另一个多边形中的相同位置,这样我就可以正确地从一个多边形跳到另一个多边形。我考虑过std::list,但我不知道它是否允许我做这样的事情。也许std::vector不是适合您需要的容器。你想做什么?@Fred Larson@templatetypedef我不想指向元素本身,我想指向它的位置。我正在创建的是一个用于多边形中布尔运算的算法,我需要找到两个多边形之间的交点,并知道其中一个多边形在另一个多边形中的相同位置,这样我就可以正确地从一个多边形跳到另一个多边形。我想到了std::list,但我不知道它是否允许我做这样的事情。