关于STL与树

本文探讨了标准模板库(STL)为何未明确提供树结构的原因,并通过实例展示如何利用STL组件轻松构建树形结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

定义节点:

class CTreeNode

{

public:

Type          Data;

vector< CTreeNode >    Children;

}

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

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

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

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

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

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

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值