Здравствуйте KoraK, Вы писали:
KK>Здравствуйте Reef, Вы писали:
R>>Не подскажите где можно найти C-код какого-нибудь класса, реализующего структуру дерева?
KK>тут KK>только будем считать что вы описались — не "С-код" а "С++ коод", на С-коде классы не попишешь
KK>[ccode] KK>class Node KK>{ KK> public: KK> Node(Node* pParent=NULL) {Parent=pParent;} KK> Node* GetParent(){return Parent;}
KK> vector<Node> Childs;
KK> private: KK> Node* Parent; KK>}; KK>[\ccode]
KK>Только добавь пару методов
Здравствуйте DNS, Вы писали:
DNS>Здравствуйте KoraK, Вы писали:
KK>>Здравствуйте Reef, Вы писали:
R>>>Не подскажите где можно найти C-код какого-нибудь класса, реализующего структуру дерева?
KK>>тут KK>>только будем считать что вы описались — не "С-код" а "С++ коод", на С-коде классы не попишешь
KK>>[ccode] KK>>class Node KK>>{ KK>> public: KK>> Node(Node* pParent=NULL) {Parent=pParent;} KK>> Node* GetParent(){return Parent;}
KK>> vector<Node> Childs;
KK>> private: KK>> Node* Parent; KK>>}; KK>>[\ccode]
KK>>Только добавь пару методов
DNS>Миленько, только Children смотрелось бы ещё милее
[ccode]
class Node
{
public:
[...]
vector<Node> Childs;
[...]
};[\ccode]
Во-первых, не vector, а std::vector. Во-вторых, вызывает очень большие сомнения обоснованность нахождения члена Childs в области public:. В-третьих, использование контейнеров STL с недоопределенными (incomplete) типами вызывает undefined behavior.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Здравствуйте KoraK, Вы писали:
ПК>[ccode] ПК>class Node ПК>{ ПК> public: ПК>[...] ПК> vector<Node> Childs; ПК>[...] ПК>};[\ccode]
ПК>Во-первых, не vector, а std::vector. Во-вторых, вызывает очень большие сомнения обоснованность нахождения члена Childs в области public:. В-третьих, использование контейнеров STL с недоопределенными (incomplete) типами вызывает undefined behavior.
В-четвертых слово Child во множественном числе есть Children
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Во-первых, не vector, а std::vector. Во-вторых, вызывает очень большие сомнения обоснованность нахождения члена Childs в области public:. В-третьих, использование контейнеров STL с недоопределенными (incomplete) типами вызывает undefined behavior.
В пятых, использовать вектор экземпляров — это жестоко! Добавил новый подузел, вышел за пределы capacity(), — как начнется copy-ctor'ование всех остальных узлов дерева.
Если уж хранить, то вектор умных указателей, например, boost::shared_ptr (или ввести подсчет ссылок прямо в узлы).
Кроме того, если запросы getNextSibling / getPrevSibling достаточно распространены, то, возможно, будет продуктивнее внедрить функциональность двунаправленного списка прямо в узлы.