自包含容器是一种自包含的结构,很有趣。需要使用模板类,但只有在模板类型是该类的子类时,才使该类具有自包含的结构。这种结构从数据结构的角度看比较有用。通常的树类中的模板通常是“数据”的概念,即模板不参与树结构的逻辑,只作为树结点的一个额外的、附加的数据看待。但在自包含的树结点结构中,模板作为树结点的子类出现。

一、自包含树结点类

这样可以解决某种问题,即原来通常意义下的树结点类,如果子类实现了更多的功能,但子类的孩子结点却还是原来的树结点类。当然我们可以强制转换成树结点子类,但必须保证在添加孩子结点的时候都必须添加树结点子类,如果万一添加了树结点类,那么这种转换就不会成功,再操作就会有崩溃的风险。

那么就希望树结点子类的孩子节点仍然是树结点的子类。这样不存在类型强制转换,也就不存在转换失败的风险。这就是自包含树结点,即

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(自包含容器)的更多相关文章

  1. Init Container(初始化容器)

    在很多应用场景中,应用在启动之前都需要进行如下初始化操作. ◎ 等待其他关联组件正确运行(例如数据库或某个后台服务). ◎ 基于环境变量或配置模板生成配置文件. ◎ 从远程数据库获取本地所需配置,或者 ...

  2. 【原创】大数据基础之Spark(2)Spark on Yarn:container memory allocation容器内存分配

    spark 2.1.1 最近spark任务(spark on yarn)有一个报错 Diagnostics: Container [pid=5901,containerID=container_154 ...

  3. bootstrap3中container与container_fluid容器的区别

    声明:转自 CSDN博客 .container与.container_fluid是bootstrap中的两种不同类型的外层容器,按照官方的说法,这两者的区别是: .container 类用于固定宽度并 ...

  4. 【原创】基于Docker的CaaS容器云平台架构设计及市场分析

    基于Docker的CaaS容器云平台架构设计及市场分析 ---转载请注明出处,多谢!--- 1 项目背景---概述: “在移动互联网时代,企业需要寻找新的软件交付流程和IT架构,从而实现架构平台化,交 ...

  5. Flutter——Container组件(容器组件)

    名称 功能 alignment topCenter:顶部居中对齐 topLeft:顶部左对齐 topRight:顶部右对齐 center:水平垂直居中对齐 centerLeft:垂直居中水平居左对齐 ...

  6. css 禁用浏览器滚动条,初始最外层包含容器 wrapper

    浏览器默认的视窗会随着滚动条滚动,绝对定位的元素会随着滚动条滚动,为了解决这个问题我们需要禁止浏览器的滚动条,然后在代码的最外层初始化一个 div(最外层包含容容器代替默认的视窗),是滚动天出现在最外 ...

  7. SAP Container Controls(容器)

    BC_CONTROLS_TUTORIAL 效果 代码 REPORT bc_controls_tutorial. *------------------------------------------- ...

  8. windows container (docker) 容器资料笔记

    背景 业务需求:简化公司私有云,公有云的部署,尝试寻找更好的,更优化的技术方案替换现有的虚拟机部署方案. 技术背景: .net Docker 学习资料 Docker中文社区: http://www.d ...

  9. React 设计模式 --- Container and Presentational pattern(容器和展示组件分离)

    在React开发中,一个典型的React组件通常会混杂着逻辑操作部分和展示部分.逻辑操作部分指的是和页面UI无关的内容,如API的调用,数据的处理,事件处理函数. 展示部分则指的是创建页面UI 的内容 ...

随机推荐

  1. The partial charge density (1)

    ============================================================================================= The pa ...

  2. Python3 ascii() 函数

    Python3 ascii() 函数  Python3 内置函数 描述 ascii() 函数类似 repr() 函数, 返回一个表示对象的字符串, 但是对于字符串中的非 ASCII 字符则返回通过 r ...

  3. 【英宝通Unity4.0公开课学习 】(一)资源管理

    经过多次面试后发现自己对Unity3D的框架缺乏一个整体的认识. 而前面由于离职等原因总是忙于修修补补,疲于奔命,感觉相当疲惫. 还好,后来经过调整,开始淡定了起来.得特别感谢一本书哇:<高效人 ...

  4. maven不存在jar包解决

    win7环境 下载:https://maven.apache.org/download.cgi 提取文件,并cmd 转到bin目录 假设要添加的jar包是jbarcode-0.2.8.jar, 可执行 ...

  5. 开发中经典sql总结

    1.说明:显示文章.提交人和最后回复时间 select a.title,a.username,b.adddate ,(select max(adddate) from table where tabl ...

  6. Flask源码剖析详解

    1. 前言 本文将基于flask 0.1版本(git checkout 8605cc3)来分析flask的实现,试图理清flask中的一些概念,加深读者对flask的理解,提高对flask的认识.从而 ...

  7. using directive 使用指令,与using declaration使用声明。

    使用指令是把名字空间中的所有名字引入到当前作用域,而使用声明是把名字空间的某个名字引入到当前作用域中 语法如下 //test.cpp #include<iostream> //using ...

  8. 2018.10.20 bzoj1079: [SCOI2008]着色方案(多维dp)

    传送门 dp妙题. f[a][b][c][d][e][last]f[a][b][c][d][e][last]f[a][b][c][d][e][last]表示还剩下aaa个可以用一次的,还剩下bbb个可 ...

  9. 如何设置vim中tab键缩进---配置初始化设置

    转载自:http://blog.51cto.com/xuding/1725376:加了一些补充说明 问题: Linux系统下,Tab键默认为8个字符,需呀将其修改为4个字符的方式使用 步骤: 1.在用 ...

  10. python+django+mysql配置步骤

    安装python 详细步骤见:地址 1. 从 http://www.python.org/download/ 下载最新的python版本 (我用的是python2.6, 当时最稳定的) 2. 然后一路 ...