c++ - 获取指向 vector 元素的指针

标签 c++ pointers vector

我遇到了一个我不太明白的问题:

我正在用

创建一个对象 Edge
edge_vec1.push_back(Edge(src,dest));

然后我想在一个单独的 vector 中保留一个指向这条边的指针:

edge_vec2.push_back(&edge_vec1.back());

但是,一旦我添加了第二个 Edge 对象,指向 edge_vec2 中第一个 Edge 的指针就会失效(获取一些随机数据)。是不是因为 edge_vec2 中的指针实际上指向了 edge_vec1 中的某个地方,而不是底层元素?我可以通过在堆上创建我的 Edge 对象来避免这种情况,但我想了解发生了什么。

谢谢。

最佳答案

当一个新元素被添加到一个 vector 中时, vector 可以被重新分配。因此,指向 vector 元素的指针的先前值可能无效。

您应该首先为防止重新分配的 vector 保留足够的内存。

edge_vec2.reserve( SomeMaxValue );

关于c++ - 获取指向 vector 元素的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44190712/

相关文章:

c++ - 删除 '#include <algorithm>' 不会破坏代码

c++将指针从构造函数传递给构造函数

c++ - 如何使用 windows.h 的函数更改 C++ 中的控制台字体大小?

c++ - 获取 OpenCV 窗口并全屏显示

c++ - 分配给 std :vector from a structure containing an array

python - 为什么在打印向量时隐式调用 str(vector)?

c - 如何返回指向结构数组内元素的指针?

c - 在 C 中删除整个链表 - 为什么不使用引用指针?

c++ - free(): invalid pointer error in C++

c++ - 最好用正确的值实例化对象然后推送到 vector ,或者实例化,推送到 vector 然后设置正确的值?