我希望这是一个简单的问题..
我有一个元素 vector 。这些元素是我自己的类类型。我维护一个指向该 vector 的特定成员的指针。
问题是:如果我从 vector 中删除元素,指针会发生什么变化?
子问题:
- 在遍历 vector 时,有什么方法可以检查迭代器是否指向我当前拥有指针的元素?
vIterator == pElement
会这样做吗? - 有没有什么方法可以从 vector 中删除元素,只需要一个指向该元素的指针?如果上一个问题的答案是肯定的,那么我想我可以用循环来完成。
提前致谢!
最佳答案
- 它现在将指向无效内存a 或指向不同的对象。通常,使用该指针现在是未定义的行为。
-
if(&*vIterator == ptr) ...
*
从迭代器中获取对对象的引用,&
为您提供其地址。请注意,虽然&*
是指针上的空操作,但这里我们需要它,因为迭代器重载了*
。 您可以使用线性搜索,但效率低得不必要。您可以利用存储是连续的这一事实,并执行以下操作:
vec.erase(vec.begin()+(ptr-&vec[0]));
ptr-&vec[0]
根据通常的指针算法为您提供 vector 中的索引,并将它添加到开始迭代器会产生指向它的迭代器。
一个。从技术上讲, vector 不允许在删除元素时释放内存,因此更正确的说法是它可能指向一个无效的(=已经被销毁的)对象。
关于指向 vector 元素的 C++ 指针,元素已删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23693514/