ノードを表す基本クラス Node を持つ単純な階層ツリー構造があります。ノードは、別の特定のタイプ (サブクラス化) である可能性があります。
class Node {
vector<Node*> childs;
// simple node manipulation methods
const vector<Node*>& getChildren() { return childs; }
}
そして、私はいくつかのサブクラスを持っていますNode
:
class FacultyNode : public Node; ...
class DepartmentNode : public Node; ...
教員ノードのすべての子がDepartmentNode
タイプであることを知っているとします。開発者の作業を保存するために、次のようなことをするつもりでした
vector<DepartmentNode*> FacultyNode::getDepartments() {
vector<Node*> tmp = this->getChildren();
vector<DepartmentNode*> a;
a.reserve(tmp.size());
for (int i = 0; i < tmp.size(); i++) {
a.push_back(static_cast<DepartmentNode*>(tmp[i]));
}
return a;
}
しかし、それには がかかりO(n)
、呼び出しが行われるたびに新しいベクトル オブジェクトが作成されます。
これを行うより良い方法はありますか?