В настоящее время я пытаюсь реализовать алгоритм A * pathfinding с использованием C++.C++ вектор проблемы указателей
У меня проблемы с указателями ... Я обычно нахожу способ избежать их использования, но теперь, я думаю, я должен использовать их.
Так скажем, у меня есть «узел» класс (не связанные с А *) реализован следующим образом:
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 х) и родитель (указатель на другой узел), используемый для навигации по узлам с родительскими указателями.
Теперь я хочу иметь список узлов, который содержит все узлы, которые были или рассматриваются. Это будет выглядеть следующим образом:
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]);
Существует явно неопределенное поведение происходит, но я не могу управлять, чтобы увидеть, где. Неужели кто-нибудь, пожалуйста, покажите мне, где мое непонимание указателей нарушает этот код и почему?
Ничего себе, я никогда не думал об использовании индексов вместо указателей, я определенно попробую его, так как вектор «узлов» никогда не удалит элементы. –