c++ - std::vector 指针可靠吗?

标签 c++ vector

假设我有这个:

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

....
myObject = &objects[4];

是否可以安全地假设无论 objects[] 有多大,如果我删除了一些,只要我不删除()myObject 指向的实际对象,myObject 的指针将始终有效?或者它的工作方式不同?如果以上方法不起作用,我还能怎样实现呢?这是因为在我的设计中,我希望 child 有一个指向其父项的指针,这是在添加子项时由父项分配的,但是父项在 std::vector 中,我需要随机访问。 std::list 对我来说会更好吗?

谢谢

最佳答案

不,这样假设绝对不安全。

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

std::list 会更好;您可以并行维护一个指向项目的指针 vector ,这样您就可以通过索引访问它们,而无需在内存中移动它们。

关于c++ - std::vector 指针可靠吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3868287/

相关文章:

c++ - 递归的意外性能结果

c++ - 访问指针 vector 中的信息

C++循环直到输入特定字符

C++:隐式成员函数

c++ - 如何在 MS 编译器中用数组初始化 C++ vector/集合?

c++ - x,y,z 到 vector 偏移

c++ - 如何/可能有一个 vector<unique_ptr<ABC>>?

c++ - 谁应该清除通过引用检索的 vector ?

c++ - MFC DYNAMIC_DOWNCAST 与 dynamic_cast

c++ - 对和字符串流