std :: vector指针是否可靠?

jma*_*erx 1 c++ vector

说我有这个:

Object *myObject;
std::vector<Object> objects(99);

....
myObject = &objects[4];
Run Code Online (Sandbox Code Playgroud)

假设myObject的指针总是有效,无论对象[]有多大,如果我删除了一些,只要我不擦除()myObject指向的实际对象,是否可以安全?或者它的工作方式不同?如果以上不起作用,我怎么能实现这一目标?这是因为在我的设计中,我希望一个孩子有一个指向其父项的指针,父项在添加子项时由父项指定,但是父项在std :: vector中,我需要随机访问.在我的情况下,std :: list会更好吗?

谢谢

Pet*_*ter 5

不,假设这绝对不安全.

该标准解释了什么会/不会使标准容器上的迭代器失效; 在向量迭代器失效的任何时候,指向它的指针也是如此.实际上,这意味着当向量调整大小时(包括调用时隐式push_back()),指向它的任何迭代器都将失效,指针就会失效.类似地,调用erase()将使擦除项目之后的指针无效,因为它们都必须向上移动以填充已擦除的空间.

A std::list会更好; 你可以并行维护一个指向项目的指针向量,这些指针允许你通过索引访问它们,而不需要它们在内存中移动.