当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 一个排序用的C++函数模板

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 一个排序用的C++函数模板


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 128 ::
收藏到网摘: n/a

一个排序用的C++函数模板

作者:祝晓鹰

下载源代码

  前段时间编写MFC程序时,需要对一个字符串集合CStringArray进行排序。标准模板库STL提供的函数模板sort虽然功能强大,但有两个不便:

1、 sort使用枚举器(iterator)机制处理C++数组(即指针)和诸如vector这样的STL对象,但MFC集合类CArray、CStringArray没有提供枚举器。虽然可以通过集合类的成员函数GetData把集合转换成指针,然后调用sort进行处理,但这样做破坏了对象的封装性。

2、如果使用降序排序,还需要另外编一个比较函数。

  为此我自己编写了一个排序用的函数模板,一方面满足自己的需求,另一方面也顺便巩固一下C++基础。该函数模板虽然功能简单一些,但支持C++数组和MFC集合类,支持升序和降序,对于一般应用来说足够了。

函数代码如下:

// 该函数模板使用冒泡法对集合元素进行排序,参数说明:// collection 集合对象,集合对象必须提供 [] 操作。// element 集合元素,该参数的作用仅仅是确定集合元素类型,// 参数的值没有用,建议取集合的第一个元素。集合// 元素必须提供复制、赋值和比较操作。// count 集合元素的数目// ascend 表明排序时使用升序(true)还是降序(false)// 该函数模板支持C++数组以及MFC集合CStringArray、CArray。template <typename COLLECTION_TYPE, typename ELEMENT_TYPE>void BubbleSort(COLLECTION_TYPE& collection, ELEMENT_TYPE element, int count, bool ascend = true){	for (int i = 0; i < count-1; i++)	for (int j = 0; j < count-1-i; j++)	if (ascend)	{	// 升序	if (collection[j] > collection[j+1])	{	ELEMENT_TYPE temp = collection[j];	collection[j] = collection[j+1];	collection[j+1] = temp;	}	}	else	{	// 降序	if (collection[j] < collection[j+1])	{	ELEMENT_TYPE temp = collection[j];	collection[j] = collection[j+1];	collection[j+1] = temp;	}	}}
下列代码对整型数组按升序排序:
	int arrayInt[] = {45, 23, 76, 91, 37, 201, 187};	BubbleSort(arrayInt, arrayInt[0], 7);
下列代码对整数集合按升序排序:
	CArray <int, int> collectionInt;	collectionInt.Add(45);	collectionInt.Add(23);	collectionInt.Add(76);	collectionInt.Add(91);	collectionInt.Add(37);	collectionInt.Add(201);	collectionInt.Add(187);	BubbleSort(collectionInt, collectionInt[0], collectionInt.GetSize());
下列代码对一个字符串数组按降序排序:
	CString arrayString[] = {"eagle", "hawk", "falcon"};	BubbleSort(arrayString, arrayString[0], 3, false);

下列代码对一个字符串集合按降序排序:

	CStringArray collectionString;	collectionString.Add("eagle");	collectionString.Add("hawk");	collectionString.Add("falcon");	BubbleSort(collectionString, collectionString[0], collectionString.GetSize(), false);