Delphi泛型库DGL中的算法部分声明
来源:互联网 发布:手机数据.修复器 编辑:程序博客网 时间:2024/06/05 08:00
Delphi泛型库DGL中的算法部分声明
HouSisong@GMail.com
tag:delphi泛型库,DGL,泛型,算法
DGL库下载 安装方法:将库解压到一个目录,然后在Delphi中添加搜索路径
DGL库的算法的声明文件Algorithms.inc_h:
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------
// Copyright (c) 2004
// Delhi泛型库--DGL(The Delphi Generic Library)
// Author: HouSisong
//------------------------------------------------------------------------------
// DGL库的算法的声明
// Create by HouSisong, 2004.09.01
// LastUpdate by HouSisong, 2005.03.27
//------------------------------------------------------------------------------
//Algorithms.inc_h ; Algorithms.inc_pas
{$ifndef __Algorithms_inc_h_}
{$define __Algorithms_inc_h_}
{$I DGLIntf.inc_h}
{$ifndef _DGL_Compare}
function _IsEqual(const Value0,Value1:_ValueType):boolean;
function _IsLess(const Value0,Value1:_ValueType):boolean;
{$endif}
{$ifndef _DGL_Compare_Value}
function _IsEqual_Value(const Value0,Value1:_ValueType):boolean;
function _IsLess_Value(const Value0,Value1:_ValueType):boolean;
{$endif}
type
TGenerateFunction = function (): _ValueType;
TGenerateFunctionOfObject = function (): _ValueType of object;
TTansfromFunction = function (const Value: _ValueType): _ValueType;
TTansfromFunctionOfObject = function (const Value: _ValueType): _ValueType of object;
TTansfromBinaryFunction = function (const Value0,Value1: _ValueType): _ValueType;
TTansfromBinaryFunctionOfObject = function (const Value0,Value1: _ValueType): _ValueType of object;
TVisitProc = procedure (const Value: _ValueType);
TVisitProcOfObject = procedure (const Value: _ValueType) of object;
TTestFunction = function (const Value:_ValueType):Boolean;
TTestFunctionOfObject = function (const Value:_ValueType):Boolean Of Object;
TTestBinaryFunction = function (const Value0,Value1:_ValueType):Boolean;
TTestBinaryFunctionOfObject = function (const Value0,Value1:_ValueType):Boolean Of Object;
TRandomGenerateFunction = function (const Range: Integer):integer; //0<=result<Range
TRandomGenerateFunctionOfObject = function (const Range: Integer):integer Of Object;
type
_TAlgorithms = class(TObject)
public
//返回两个迭代器之间的元素个数
class function Distance(const ItBegin,ItEnd:_IIterator):integer; overload;
//返回两个元素列是否相等
class function IsEquals(const ItBegin0,ItEnd0,ItBegin1,ItEnd1:_IIterator):boolean; overload;
//遍历
class procedure ForEach(const ItBegin,ItEnd:_IIterator;const VisitProc:TVisitProc); overload;
class procedure ForEach(const ItBegin,ItEnd:_IIterator;const VisitProc:TVisitProcOfObject); overload;
//查找 //失败返回位置等于ItEnd
class function Find(const ItBegin,ItEnd:_IIterator;const Value:_ValueType):_IIterator; overload;
class function FindIf(const ItBegin,ItEnd:_IIterator;const TestFunction:TTestFunction):_IIterator; overload;
class function FindIf(const ItBegin,ItEnd:_IIterator;const TestFunction:TTestFunctionOfObject):_IIterator; overload;
class function FindIf(const ItBegin,ItEnd:_IIterator;const Value:_ValueType;const TestBinaryFunction:TTestBinaryFunction):_IIterator; overload;
class function FindIf(const ItBegin,ItEnd:_IIterator;const Value:_ValueType;const TestBinaryFunction:TTestBinaryFunctionOfObject):_IIterator; overload;
//统计元素个数
class function Count(const ItBegin,ItEnd:_IIterator;const Value:_ValueType):integer; overload;
class function CountIf(const ItBegin,ItEnd:_IIterator;const TestFunction:TTestFunction):integer;overload;
class function CountIf(const ItBegin,ItEnd:_IIterator;const TestFunction:TTestFunctionOfObject):integer;overload;
//寻找子串
class function Search(const ItBegin,ItEnd,ItBeginSub,ItEndSub:_IIterator):_IIterator; overload;
class function Search(const ItBegin,ItEnd,ItBeginSub,ItEndSub:_IIterator;const TestBinaryFunction:TTestBinaryFunction):_IIterator; overload;
class function Search(const ItBegin,ItEnd,ItBeginSub,ItEndSub:_IIterator;const TestBinaryFunction:TTestBinaryFunctionOfObject):_IIterator; overload;
//最值
class function MinElement(const ItBegin,ItEnd:_IIterator):_IIterator; overload;
class function MinElement(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunction):_IIterator; overload;
class function MinElement(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunctionOfObject):_IIterator; overload;
class function MaxElement(const ItBegin,ItEnd:_IIterator):_IIterator; overload;
class function MaxElement(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunction):_IIterator; overload;
class function MaxElement(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunctionOfObject):_IIterator; overload;
//////////////////////////////////////////////
//交换值
class procedure SwapValue(const It0,It1:_IIterator);overload;
class procedure SwapValue(const It0:_IIterator;const Index0: integer;const It1:_IIterator;const Index1: integer);overload;
//将ItBeginSrc,ItEndSrc区间内的数据拷贝到ItBeginDest开始的区域中
class procedure Copy(const ItBeginSrc,ItEndSrc,ItBeginDest:_IIterator); overload;
//利用TansfromFunction函数进行转换
class procedure Tansfrom(const ItBegin,ItEnd:_IIterator;const TansfromFunction:TTansfromFunction); overload;
class procedure Tansfrom(const ItBegin,ItEnd:_IIterator;const TansfromFunction:TTansfromFunctionOfObject);overload;
class procedure Tansfrom(const ItBeginSrc,ItEndSrc,ItBeginDest:_IIterator;const TansfromFunction:TTansfromFunction); overload;
class procedure Tansfrom(const ItBeginSrc,ItEndSrc,ItBeginDest:_IIterator;const TansfromFunction:TTansfromFunctionOfObject);overload;
class procedure Tansfrom(const ItBeginSrc0,ItEndSrc0,ItBeginSrc1,ItBeginDest:_IIterator;const TansfromFunction:TTansfromBinaryFunction); overload;
class procedure Tansfrom(const ItBeginSrc0,ItEndSrc0,ItBeginSrc1,ItBeginDest:_IIterator;const TansfromFunction:TTansfromBinaryFunctionOfObject);overload;
//交换区间
class procedure SwapRanges(const ItBegin0,ItEnd0,ItBegin1:_IIterator);
//替换元素
class function Replace(const ItBegin,ItEnd:_IIterator;const OldValue,NewValue:_ValueType):integer; overload;
class function ReplaceIf(const ItBegin,ItEnd:_IIterator;const TestFunction:TTestFunction;const NewValue:_ValueType):integer;overload;
class function ReplaceIf(const ItBegin,ItEnd:_IIterator;const TestFunction:TTestFunctionOfObject;const NewValue:_ValueType):integer;overload;
//write ReplaceCopy() ?
//填充区间
class procedure Fill(const ItBegin,ItEnd:_IIterator;const Value:_ValueType);overload;
class procedure Fill(const ItBegin:_IIterator;const N:integer;const Value:_ValueType);overload;
class procedure Generate(const ItBegin,ItEnd:_IIterator;const GenerateFunction:TGenerateFunction);overload;
class procedure Generate(const ItBegin:_IIterator;const N:integer;const GenerateFunction:TGenerateFunction);overload;
class procedure Generate(const ItBegin,ItEnd:_IIterator;const GenerateFunction:TGenerateFunctionOfObject);overload;
class procedure Generate(const ItBegin:_IIterator;const N:integer;const GenerateFunction:TGenerateFunctionOfObject);overload;
//移除元素 //返回值(result)表示Value在[ItBegin,result)区间内被移除了
class function Remove(const ItBegin,ItEnd:_IIterator;const Value:_ValueType):_IIterator;overload;
class function RemoveIf(const ItBegin,ItEnd:_IIterator;const TestFunction:TTestFunction):_IIterator;overload;
class function RemoveIf(const ItBegin,ItEnd:_IIterator;const TestFunction:TTestFunctionOfObject):_IIterator;overload;
/////////////////////////////////////////////////////
//反转
class procedure Reverse(const ItBegin,ItEnd:_IIterator); overload;
//随机重排
class procedure RandomShuffle(const ItBegin,ItEnd:_IIterator); overload;
class procedure RandomShuffle(const ItBegin,ItEnd:_IIterator;const RandomGenerateFunction:TRandomGenerateFunction); overload;
class procedure RandomShuffle(const ItBegin,ItEnd:_IIterator;const RandomGenerateFunction:TRandomGenerateFunctionOfObject); overload;
//排序
class procedure Sort(const ItBegin,ItEnd:_IIterator); overload;
class procedure Sort(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunction); overload;
class procedure Sort(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunctionOfObject); overload;
class function IsSorted(const ItBegin,ItEnd:_IIterator):boolean; overload;
class function IsSorted(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunction):boolean; overload;
class function IsSorted(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunctionOfObject):boolean; overload;
class function BinarySearch(const ItBegin,ItEnd:_IIterator;const Value:_ValueType):_IIterator; overload;
class function BinarySearch(const ItBegin,ItEnd:_IIterator;const Value:_ValueType;const TestBinaryFunction:TTestBinaryFunction):_IIterator; overload;
class function BinarySearch(const ItBegin,ItEnd:_IIterator;const Value:_ValueType;const TestBinaryFunction:TTestBinaryFunctionOfObject):_IIterator; overload;
class function LowerBound(const ItBegin,ItEnd:_IIterator;const Value:_ValueType):_IIterator; overload;
class function LowerBound(const ItBegin,ItEnd:_IIterator;const Value:_ValueType;const TestBinaryFunction:TTestBinaryFunction):_IIterator; overload;
class function LowerBound(const ItBegin,ItEnd:_IIterator;const Value:_ValueType;const TestBinaryFunction:TTestBinaryFunctionOfObject):_IIterator; overload;
//堆操作
class procedure MakeHeap(const ItBegin,ItEnd:_IIterator);overload;
class procedure MakeHeap(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunction);overload;
class procedure MakeHeap(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunctionOfObject);overload;
class procedure PushHeap(const ItBegin,ItEnd:_IIterator);overload; //push value in [ItBegin,ItEnd-1) ,the Value at (ItEnd-1);
class procedure PushHeap(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunction);overload;
class procedure PushHeap(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunctionOfObject);overload;
class procedure PopHeap(const ItBegin,ItEnd:_IIterator);overload;//pop max Value to (ItEnd-1);
class procedure PopHeap(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunction);overload;
class procedure PopHeap(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunctionOfObject);overload;
class procedure SortHeap(const ItBegin,ItEnd:_IIterator);overload;
class procedure SortHeap(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunction);overload;
class procedure SortHeap(const ItBegin,ItEnd:_IIterator;const TestBinaryFunction:TTestBinaryFunctionOfObject);overload;
end;
{$endif } // __Algorithms_inc_h_
- Delphi泛型库DGL中的算法部分声明
- Delphi泛型库DGL中的接口的声明
- 在Delphi中实现类型安全的容器,Delphi泛型库DGL引介(提供源码下载)
- 在Delphi中实现类型安全的容器,Delphi泛型库DGL引介(提供源码下载)
- delphi中的提前声明
- 部分算法编程(Delphi)
- Delphi中的SHA256算法
- [C++学习历程]基础部分 C++中的类型和声明
- TLD算法中的Learning部分解读
- 聚类算法中的实验部分
- delphi部分学习笔记
- delphi部分技巧集合
- delphi form 部分方法
- Delphi 部分API
- delphi const常量声明演示
- Delphi var变量声明演示
- 一个DELPHI写的AES算法源码中的问题
- DGL库的使用Demo
- ArrayList转换String[]
- 关于DNS的一些基础知识
- 关于吸血鬼的一点知识
- 虚拟局域网,端口汇聚 QoS功能
- Java下的Framework编写(反射,泛型,元数据,CGLib,代码动态生成,AOP,动态语言嵌入)(1)--序
- Delphi泛型库DGL中的算法部分声明
- SQL SERVER 与ACCESS、EXCEL的数据转换
- EasyMock使用简明手册
- Google改台湾地图标识 侨界忧心海外华裔被误导
- EJB的核心技术应用
- 存储过程动态配置
- String与StringBuffer
- 通过分页列表来提高应用程序性能
- 取存储过程的信息