我正在嘗試使用C++實現A *尋路算法。C++向量指針問題
我有一些問題,指針......我通常會找到一個方法來避免使用它們,但現在我想我必須要使用它們。
所以我們可以說我有一個 「節點」 類(不涉及A *)來實現這樣的:
class Node
{
public:
int x;
Node *parent;
Node(int _x, Node *_parent)
: x(_x), parent(_parent)
{ }
bool operator==(const Node &rhs)
{
return x == rhs.x && parent == rhs.parent;
}
};
它有一個值(在這種情況下,INT x)和父母(指針到另一個節點)用於通過父指針在節點間導航。
現在,我想要一個包含所有已經或正在考慮的節點的節點列表。它應該是這樣的:
std::vector<Node> nodes;
我想,它包含指針指向節點列表內的節點列表。 聲明如下:
std::vector<Node*> list;
不過,我絕對不是正確理解指針,因爲我的代碼將無法正常工作。 下面是我在談論的代碼:
std::vector<Node> nodes;//nodes that have been considered
std::vector<Node*> list;//pointers to nodes insided the nodes list.
Node node1(1, NULL);//create a node with a x value of 1 and no parent
Node node2(2, &node1);//create a node with a x value of 2 and node1 being its parent
nodes.push_back(node1);
list.push_back(&nodes[0]);
//so far it works
//as soon as I add node2 to nodes, the pointer in "list" points to an object with
//strange data, with a x value of -17891602 and a parent 0xfeeefeee
nodes.push_back(node2);
list.push_back(&nodes[1]);
顯然存在不確定的行爲怎麼回事,但我不能設法看到。 有人請告訴我,我對指針缺乏理解的地方會破壞這段代碼,爲什麼?
哇,我從來沒有想過使用索引而不是指針,我一定會嘗試一下,因爲「節點」向量將永遠不會刪除元素。 – 2010-10-11 20:42:55