乙個排序用的C 函式模板

2021-04-22 15:53:35 字數 1731 閱讀 3766

前段時間編寫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 通用的資料型別,名稱可以替換,通常為大寫字母 函式模板使...