添加和访问指针的矢量

vectors of pointers adding and accessing

本文关键字:指针 访问 添加      更新时间:2023-10-16

问题是我在这里没有得到预期的输出。我有一个Node类,它有一个称为neigbours的指针向量。我想把物体的邻域放到向量中。

Node current = Node(1, 1, street , 2, 2);
Node neighbour = Node(2, 2);
neighbour.instreets.push_back(Street(1, 1, street, 2, 2));
nodes.push_back(neighbour);
current.neighours.push_back(&nodes.at(0));
nodes.push_back(current);

然后我想访问它打印出来。

cout << nodes[1].x << " " << nodes[1].y << endl;
cout << "- " << nodes[0].outstreets[0].name << endl;
cout << "ends " << nodes[1].neighours.at(0)->x << " " << nodes[1].neighours[0]->y << endl;

但我得到了一些随机数来代替邻居坐标。我是否以错误的方式访问它们?

预期输出为

1 1
- street
ends 2 2

编辑:nodes是Node对象的向量。

将元素添加到nodes向量后,可以重新分配其内存。这意味着它的元素被移到内存中的另一个位置,指向它们的指针被无效。

特别是,执行nodes.push_back(current); 后,您用&nodes.at(0)获取的地址不再有效

有多种方法可以修复它,但最简单的方法是将nodes设置为deque,而不是vector。Deque不会重新分配内存,因此您的代码可以正常工作。