Я решил эту проблему !!! Я обнаружил, что если я должен использовать vector<Node*> children;
. Но я не совсем уверен, причина, кто-то может сказать мне, почему? Спасибо:)
Вопрос:
Я использую test.cpp
для создания древовидной структуры, такой как:
Результат (ROOT->children).size()
равен 2
, поскольку root
имеет двоих детей.
Результат ((ROOT->children)[0].children).size()
должен быть 2
, так как у первого ребенка root
есть два ребенка. Но ответ 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;
}