【原创】Self-Contained Container(自包含容器)
自包含容器是一种自包含的结构,很有趣。需要使用模板类,但只有在模板类型是该类的子类时,才使该类具有自包含的结构。这种结构从数据结构的角度看比较有用。通常的树类中的模板通常是“数据”的概念,即模板不参与树结构的逻辑,只作为树结点的一个额外的、附加的数据看待。但在自包含的树结点结构中,模板作为树结点的子类出现。
一、自包含树结点类
这样可以解决某种问题,即原来通常意义下的树结点类,如果子类实现了更多的功能,但子类的孩子结点却还是原来的树结点类。当然我们可以强制转换成树结点子类,但必须保证在添加孩子结点的时候都必须添加树结点子类,如果万一添加了树结点类,那么这种转换就不会成功,再操作就会有崩溃的风险。
那么就希望树结点子类的孩子节点仍然是树结点的子类。这样不存在类型强制转换,也就不存在转换失败的风险。这就是自包含树结点,即
template <class T>
class CSelfTreeNode
{
private:
vector<T> m_children;
}
当然,只有这个结构还构不成“自包含”,需要子类在继承的时候,模板类是他自己,即(假设子类名是 CDerivedSelfTreeNode)
class CDerivedSelfTreeNode : public CSelfTreeNode<DerivedSelfTreeNode *>
{
}
二、自包含列表结点
同时可以看到,如果我们把上面自包含树结点修改一下,就变成了一个自包含列表。好似将两个镜子相对,镜子里就会出现N多子镜子一样的效果。
template <class T>
class CSelfListNode
{
private:
T m_t;
}
同样,我们需要子类的继承来实现自包含,即
class CDerivedSelfListNode : public CSelfListNode<CDerivedSelfListNode *>
{
}
三、一点点设想
突然有个想法,如果这种自包含的类结构用在分形理论的程序设计上,而不是用递归,是不是会带来一些意想不到的效果呢?(注:只是猜想,并没有实际去验证。)
【原创】Self-Contained Container(自包含容器)的更多相关文章
- Init Container(初始化容器)
在很多应用场景中,应用在启动之前都需要进行如下初始化操作. ◎ 等待其他关联组件正确运行(例如数据库或某个后台服务). ◎ 基于环境变量或配置模板生成配置文件. ◎ 从远程数据库获取本地所需配置,或者 ...
- 【原创】大数据基础之Spark(2)Spark on Yarn:container memory allocation容器内存分配
spark 2.1.1 最近spark任务(spark on yarn)有一个报错 Diagnostics: Container [pid=5901,containerID=container_154 ...
- bootstrap3中container与container_fluid容器的区别
声明:转自 CSDN博客 .container与.container_fluid是bootstrap中的两种不同类型的外层容器,按照官方的说法,这两者的区别是: .container 类用于固定宽度并 ...
- 【原创】基于Docker的CaaS容器云平台架构设计及市场分析
基于Docker的CaaS容器云平台架构设计及市场分析 ---转载请注明出处,多谢!--- 1 项目背景---概述: “在移动互联网时代,企业需要寻找新的软件交付流程和IT架构,从而实现架构平台化,交 ...
- Flutter——Container组件(容器组件)
名称 功能 alignment topCenter:顶部居中对齐 topLeft:顶部左对齐 topRight:顶部右对齐 center:水平垂直居中对齐 centerLeft:垂直居中水平居左对齐 ...
- css 禁用浏览器滚动条,初始最外层包含容器 wrapper
浏览器默认的视窗会随着滚动条滚动,绝对定位的元素会随着滚动条滚动,为了解决这个问题我们需要禁止浏览器的滚动条,然后在代码的最外层初始化一个 div(最外层包含容容器代替默认的视窗),是滚动天出现在最外 ...
- SAP Container Controls(容器)
BC_CONTROLS_TUTORIAL 效果 代码 REPORT bc_controls_tutorial. *------------------------------------------- ...
- windows container (docker) 容器资料笔记
背景 业务需求:简化公司私有云,公有云的部署,尝试寻找更好的,更优化的技术方案替换现有的虚拟机部署方案. 技术背景: .net Docker 学习资料 Docker中文社区: http://www.d ...
- React 设计模式 --- Container and Presentational pattern(容器和展示组件分离)
在React开发中,一个典型的React组件通常会混杂着逻辑操作部分和展示部分.逻辑操作部分指的是和页面UI无关的内容,如API的调用,数据的处理,事件处理函数. 展示部分则指的是创建页面UI 的内容 ...
随机推荐
- Lunch Time(费用流变型题,以时间为费用)
Lunch Time http://acm.hdu.edu.cn/showproblem.php?pid=4807 Time Limit: 4000/2000 MS (Java/Others) ...
- 整合Spring框架和Hibernate框架
-------------------siwuxie095 整合 Spring 框架和 Hibernate 框架 1.导 ...
- 使用VisualSVN Server搭建SVN服务器[xyytit]
使用 VisualSVN Server来实现主要的 SVN功能则要比使用原始的 SVN和 Apache相配合来实现源代码的 SVN管理简单的多,上手也没有那么复杂. 下面就看看详细的说明 Visual ...
- .NET格式化字符串详细说明
DataFormatString属性:{0:Bxx}B为取值类型 C 以货币格式显示数值. D 以十进制格式显示数值. E 以科学记数法(指数)格式显示数值. F 以固定格式显示数值. G 以常规格式 ...
- OC 线程操作 - GCD使用 - 栅栏函数
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //同步函数无需栅栏函数 //栅栏 ...
- TextView 小技巧
1.TextView的单行显示 最后空间不够的画变为省略号显示 textView中让结尾变为省略号android:ellipsize = "end" 省略号在结尾tv.setEll ...
- 什么是maven,jar包的查找过程?
1.什么是maven? Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. 2.什么是项目管理工具? 就是SVN.对于SVN的介绍见我的上一篇博客 ...
- async与await
在方法上可以加 async,方法体内需要有 await,没有await的话,会出现warn警告.async单独出现是没有用的. await只能出现在Task前面.await Task的后面的代码会被封 ...
- 图像获取与采集及图像格式与Region介绍——第2讲
一.图像获取与采集 1.本地图片读取 ① 单张读取 直接传入图片路径即可,可以用绝对路径,也可以用相对路径: read_image (Image, 'C:/Users/Administrator/De ...
- phython学习
Python 中文学习大本营 关于作者 赞助本站 The Python Tutorial (Python 2.7.X) 的中文翻译版本.Python Tutorial 为初学 Python 必备官方教 ...