指针添加和访问的向量

时间:2016-05-04 13:17:04

标签: c++ pointers vector

问题是我在这里没有得到预期的输出。我有一个Node类,它有一个名为neigbours的指针向量。我想将对象neigbour放入向量中。

var filename = path.match(/[^\\/]*$/)[0];

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

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);

但我得到一些随机数字而不是邻居coordinades。我是以错误的方式访问它们吗?

预期产出

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;

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

1 个答案:

答案 0 :(得分:1)

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

特别是,&nodes.at(0)后执行nodes.push_back(current);

后,您使用nodes的地址无效

有多种方法可以修复它,但最简单的方法是deque vector而不是not_one = filter(lambda x: x!=1, chked) # or in python3 not_one = list(filter(lambda x: x!=1, chked)) 。 Deque不会重新分配内存,因此您的代码可以正常工作。