泛型编程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# 中的委托和事件 分类: .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
  • 1216

c#2_0的新特性泛型

  • 2011-11-09 15:56
  • 11KB
  • 下载

泛型编程与STL

  • 2017-10-04 10:46
  • 17.37MB
  • 下载

loading黑马程序员之高级编程:泛型(4-3)

package com.heima.generic; import java.util.HashMap; import java.util.Iterator; import java.util.Ma...

泛型编程与STL

  • 2014-08-29 23:15
  • 17.37MB
  • 下载

c++ primer读书笔记--第十六章 模板和泛型编程

c++ primer读书笔记–第十六章 模板和泛型编程件在泛型编程中,我们所编写的类和函数能够多态地用于跨越编译时不相关的类型。一个类或一个函数可以用来操纵多种类型的对象。标准库中的容器、迭代器和算法...

c++泛型编程

  • 2012-11-28 17:11
  • 391KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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