簡體   English   中英

我的DFS樹的意外結果(C ++)

[英]Unexpected result of my DFS tree (C++)

我已經解決了這個問題! 我發現如果我必須使用vector<Node*> children; 但我不太確定原因,有人可以告訴我為什么嗎? 謝謝:)

題:

我使用test.cpp生成一個樹結構,如:

在此輸入圖像描述

(ROOT->children).size()2 ,因為root有兩個子(ROOT->children).size()

((ROOT->children)[0].children).size()應為2 ,因為root的第一個子((ROOT->children)[0].children).size()有兩個子((ROOT->children)[0].children).size() 但答案是0 ,為什么? 這對我來說真的很困惑。

test.cpp(此代碼在visual studio 2010中可運行)

#include <iostream>
#include <vector>
using namespace std;

struct Node {
    int len;
    vector<Node> children;
    Node *prev;
    Node(): len(0), children(0), prev(0) {};
};

class gSpan {
public:
    Node *ROOT;
    Node *PREV;
    void read();
    void insert(int);
};

int main() {
    gSpan g;
    g.read();
    system("pause");
}

void gSpan::read() {
    int value[4] = {1, 2, 2, 1};
    ROOT = new Node();
    PREV = ROOT;
    for(int i=0; i<4; i++) {
        insert(value[i]);
    }
    cout << "size1: " << (ROOT->children).size() << endl; // it should output 2
    cout << "size2: " << ((ROOT->children)[0].children).size() << endl; // it should output 2
    system("pause");
}

void gSpan::insert(int v) {

    while(v <= PREV->len)
        PREV = PREV->prev;
    Node *cur = new Node();
    cur->len = v;
    cur->prev = PREV;
    PREV->children.push_back(*cur);
    PREV = cur;

}

問題是你的children矢量包含Node值而不是Node*指針。 當您的訪問權限正確使用root時,它只會找到您嘗試維護的子項的副本。 您的所有節點也都泄露了。

您可能希望為您的孩子使用std::vector<Node*>並在某些時候delete它們。 最簡單的方法可能是使用一個智能指針向量,例如一個teference計數指針,並讓智能指針處理釋放。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM