前段時間編寫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
void bubblesort(collection_type& collection, element_type element, int count, bool ascend = true)
}else}}
下列**對整型陣列按公升序排序: int arrayint = ;
bubblesort(arrayint, arrayint[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 = ;
bubblesort(arraystring, arraystring[0], 3, false);
下列**對乙個字串集合按降序排序:
cstringarray collectionstring;
collectionstring.add("eagle");
collectionstring.add("hawk");
collectionstring.add("falcon");
bubblesort(collectionstring, collectionstring[0], collectionstring.getsize(), false);
C 函式模板和排序的函式模板 學習筆記
我們在使用過載函式時,只是使用了函式名,而函式體還是得分別定義,在c 中函式模板為我們很好的解決了這個問題.1.函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template ...
C 模板 一 函式模板
c 提供了函式模板 function template.所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體制定,用乙個虛擬的型別來代表。這個通用函式就成為函式模板。凡是函式體相同的函式都可以用這個模板代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會根據實參的型別來...
C 模板一 函式模板
c 另一種程式設計思想稱為 泛型程式設計 主要利用的技術就是模板 c 提供兩種模板機制 函式模板和類模板 template函式申明或定義template 宣告建立模板 typename 表面其後面的符號是一種資料型別,可以用class代替 t 通用的資料型別,名稱可以替換,通常為大寫字母 函式模板使...