Как правильно передавать указатели для пользовательского класса - PullRequest
2 голосов
/ 12 мая 2019

BackPtr_ последнего узла указывает на себя во время генерации траектории.В основном это происходит из-за того, что backptr__ указывает на заднюю часть openNodes и при исследовании узла это последний элемент из-за pop_heap.Любой способ обойти это?

Я уже пытался сохранить openNodes как вектор объектов Node, а не указателей.

    init_node.calculateF();
    vector<Node*> openNodes;
    openNodes.push_back(&init_node);
    vector<vector<coord_t>> traj;
    while(!openNodes.empty()){
                pop_heap(openNodes.begin(), openNodes.end(), NodePtrCompareGtr());
                Node* newNodePtr = openNodes.back();
                Node newNode = *newNodePtr;
                openNodes.pop_back();
                traj = newNode.exploreNodes(openNodes, openSet, closedNodes, &newNode);
    }


    class Node
    {
        Node *backPtr_ = NULL;
        public:
        void setBackPtr(Node* nodeptr){
            backPtr_ = nodeptr;
        }

        vector<vector<coord_t>> exploreNodes(vector<Node*> &openNodes){
        newCoordList = generateCoords();
        vector<Node*> newNodeList;
        if(goal_reached(this)){
            return generate_traj(this);
        }
        for(auto const& newCoords : newCoordsList){
            Node *newNode = new Node(...);
            newNodeList.push_back(newNode);
        }
        for(auto & i : newNodeList){
            ...
            i->setBackPtr(this);
            openNodes.push_back(i);
            make_heap(openNodes.begin(), openNodes.end(), NodePtrCompareGtr());
            ...
        }
    }

Я хочу правильно сохранить backPtr_, чтобы сохранить правильныепредыдущий узел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...