У меня есть простая иерархическая древовидная структура с базовым классом 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)
, и каждый раз будет создаваться новый векторный объект.
Есть ли лучший способ сделать это?