在此期间创建MFC程序时,必须对字符串集合CStringArray进行排序。 标准模板库STL提供的函数模板sort功能强大,但存在以下两个不便:
1、sort使用枚举器(iterator )机制处理c数组),即指针和vector这样的STL对象,但MFC集合类CArray、CStringArray不提供枚举器。 集合类的成员函数GetData可以将集合转换为指针,然后调用sort进行处理,但这会破坏对象的封装。
2、使用降序排序时,需要创建其他比较函数。
为此,我自己制作了排序用的函数模板。 在满足自己需求的同时,也顺便巩固了COC的基础。 虽然此函数模板功能很简单,但它支持c数组和MFC集合类,并支持升序和降序,这对于典型的APP应用程序来说是足够的。
函数代码如下: //此函数模板使用鼓泡法对集合元素进行排序,并说明参数。
//collection集合对象。 集合对象必须提供“”操作。
//element集合元素。 此参数的作用只是确定集合元素的类型。
//参数的值没有用,建议取集合中的第一个元素。 集合
//元素必须提供复制、赋值和比较操作。
//count集合元素数
//ascend表示排序中使用升序(true )还是降序(true )
//该函数模板支持c数组、MFC集合CStringArray和CArray。
模板
void bubble sort (collection _ type collection,ELEMENT_TYPE element,int count,bool ascend=true ) )
{
for(intI=0; I计数- 1; I )
for(intj=0; j count-1-i; j )
是if(ascend )
{
//升序
if(collection[j]collection[j1] )
{
ELEMENT_TYPE temp=collection[j];
collection[j]=collection[j 1];
collection[j 1]=temp;
}
}
else
{
//降序
if(collection[j]collection[j1] )
{
ELEMENT_TYPE temp=collection[j];
collection[j]=collection[j 1];
collection[j 1]=temp;
}
}
}以下代码按升序对整数数组进行排序。 intarrayint[]={45、23、76、91、37、201、187};
bubble sort (阵列int,阵列int [0],7 ); 以下代码按升序对整数集合进行排序。 CArray 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”} ";
bubble sort (阵列字符串,阵列字符串[0],3,false );
以下代码按降序对字符串集合进行排序。 CStringArray collectionString;
collectionstring.add(「Eagle”)
collectionstring.add(「hawk”;
collectionstring.add(「Falcon”)
bubblesort(collectionstring,collectionString[0],collectionString.GetSize ),false );