泛型编程0

原创 2006年05月18日 17:23:00

 

最近写算法,习惯上了泛型编程,一敲键盘,就会不由自主的打出一个template出来。比如前一阵子的通配符搜索库的模块,以及刚刚完成的通用集合运算。

通用集合运算的主要功能是:

输入: 集合列表, 集合列表索引的并、交、差运算信息串

输出: 集合列表在该信息串的运算下所得结果集合

 

比如:

              SetList = <Set0, Set1, …, Set4>

              SetOpList = “(0+2)*((1-3)+4)”

则可以计算出一个Set出来,为(Set0Set2)((Set1Set3)Set4)的结果。

用函数对象来做的话,就成了

 

template<typename TSet, typename TOpElem>

class CSetLogicop

{

public:

     //

     int operator ()(); //TSets list and TOpElems string info,also result

}

 

这样任意的集合以及信息串的形式都可以利用该算法了,但因为是参数形式,TSet的并、交、差等集合运算怎么办呢?信息串表位置的子串如何向整数索引转化呢?

一个念头一闪而过,加上两个接口来定义这些所需要的操作,不就一切ok了?比如:

 

template<typename TSet>

class ISetOp

{

public:

          // pResult[out] = pSet1[in] pSet2[in]

          virtual int Union(TSet* pSet1, TSet* pSet2, TSet* pResult) = 0;

          // pResult[out] = pSet1[in] pSet2[in]

          virtual int Intersection(TSet* pSet1, TSet* pSet2, TSet* pResult) = 0;

          // pResult[out] = pMinuendSet[in] pSet[in]

     virtual int Minus(TSet* pMinuendSet, TSet* pSet, TSet* pResult) = 0;

     //

}

 

    这样就成了真正的通用算法了,想做什么样的集合运算,只要把这个元操作的接口实现,然后初始化到CSetLogicop中,就可以使用这个模版函数对象了。

 

c#2_0的新特性泛型

  • 2011年11月09日 15:56
  • 11KB
  • 下载

C# 中的委托和事件 分类: .NET 接口+泛型+委托+继承 2011-08-30 10:09 20人阅读 评论(0) 收藏 举报 引言 委托 和 事件在 .Net Framework中的应用非

C# 中的委托和事件 分类: .NET 接口+泛型+委托+继承2011-08-30 10:09 20人阅读 评论(0) 收藏 举报   引言 委托 和 事件在 .Net F...
  • A_post
  • A_post
  • 2011年09月05日 19:26
  • 1295

泛型编程与STL(中文版)

  • 2017年11月10日 10:55
  • 25.68MB
  • 下载

C++泛型编程和设计模式应用

  • 2009年04月19日 14:29
  • 804KB
  • 下载

STL泛型编程-set集合容器

set集合容器 set集合容器实现了红黑树(Red-BlackTree)的平衡二叉检索树的数据结构,在插入元素时...
  • zuolj
  • zuolj
  • 2013年12月15日 17:16
  • 416

泛型编程与STL——侯捷译

  • 2009年04月10日 14:30
  • 16.69MB
  • 下载

泛型编程与STL

  • 2016年10月25日 22:01
  • 16.77MB
  • 下载

如何在C语言中实现简单的泛型编程(一)

题外话               鄙人最近在家里听斯坦福大学的开放课程——《编程范式Programming Paradigms》。 附上veryCD的资源下载地址: http://www....

深入浅出_NET泛型编程_.files.rar

  • 2009年07月19日 20:13
  • 42KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:泛型编程0
举报原因:
原因补充:

(最多只允许输入30个字)