我有一个简单的层次结构树结构,其基类Node表示一个节点。节点可以是其他特定类型(子类)。C++ - 更快地向下转换树节点的子节点?
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)
,新矢量对象将被创建每次调用。
有没有更好的方法来做到这一点?
是不是那个未定义的行为? – Philipp 2011-01-26 16:21:11
你不能``reinterpret_cast`这个`矢量`的方式。 – 2011-01-26 16:25:47
为什么?指向`Node`的指针与指向`DepartmentNode`的指针的大小相同,所以如果他确信*其矢量真的只包含`DepartmentNode`,那么就没关系。 – 2011-01-26 16:26:24