关于STL与树

来源:互联网 发布:redmine 迁移数据库 编辑:程序博客网 时间:2024/06/10 04:17

最近需要使用到树结构,想在STL中找个现成的,结果没找到,怪哉!树也是常用数据类型啊,STL居然不提供?于是,又奔BOOST去找,结果还是没找到.于是,我就奇怪了,为什么这些库,都不提供树这个类型呢?

 

STL中不提供树,首先,这绝对不是STL设计者的疏忽,因为map就是通过平衡二叉树来实现的.

于是,我尝试着用STL的元素,来自己写一颗树,却发现,其实,STL中根本就不需要树,或者说,它已经隐性实现了树.

 

定义节点:

class CTreeNode

{

public:

Type          Data;

 

vector< CTreeNode >    Children;

}

 

 

这个节点一出来,相信诸位也就明白了,这已经是一颗树了.

或许还有人会有疑问,你这不是啥方法都没封装吗?

 

是的,没有封装任何方法.你或许需要封装一些方法,但这绝对不是STL需要单独实现树这种类型的理由.

树最最常用的操作,是添加节点和遍历节点.而像查询删除之类的操作,其使用频率比这两个也要少许多.

如果要封装上面四个操作,你会发现,其实使用起来,其方便程度,还远不如直接把Children暴露出来,让需要树的对象去直接操纵它.

 

STL,我个人认为,解决的最大问题,是内存管理(虽然它没有完全优美地解决).而上述的树,通过vector(其实set,list也都可以,但vector还是常用些),我们已经不需要那么费劲去考虑内存的分配与释放的问题,那么,我们还需要自己用指针写颗树吗?完全没有必要.

 

我也是看到网上有人专门写了个树结构,才有此感想,写下此文.但本人确实还是一菜鸟,若说得有什么不对,敬请指正,谢谢!