我有一个简单的层次结构树结构,其基类 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)
,并且每次调用时都会创建新的向量对象。
有没有更好的方法来做到这一点?