在通过的过程中,我问了很多关于树数据结构的问题,但似乎我没有在 C++ 中以正确的方式处理它。
在我编写数据结构的方式中,我想不出一种关于如何拥有“结束”或“开始”迭代器的方式。因此,我采用了将所有功能都包含为成员方法的方法。而不是使用迭代器和算法的标准方法。
现在我的树结构的目标是:1)尽可能快地将一个分支从一棵树移动到另一棵树。2)每个分支都应该是一棵自己的树。并且在树上工作的动作也应该能够在分支上执行。
我所做的只是创建一个包含向量的类。- 向量内部是此类的其他对象。示例(我在这里只发布一个最小的示例,因为我现在面临的最大问题是该类太大而无法处理):
template <typename ValTy>
class Tree {
private:
std::vector<std::unique_ptr<Tree> > subtrees;
ValTy value;
};
正如您所看到的,我可以从中取出一些东西subtrees
- 并将其用作树或复制它。然而,由于顶层树没有指示有多少子树(或多少层),所以不可能声明“结束迭代器”?并且像 std::find() 这样的算法不会遍历整个树(以及它的所有子树)?
是否有可能利用这些算法,同时仍然保持简单的“分支”结构?