[cpp]view plain
copy
void
bubble_sort(
intarray,
intlength)
} } return
; }
如果把資料型別改成通用的資料型別,你需要做什麼呢?兩個:(1)算術符"="過載;(2)比較函式。下面就是乙個設計的class型別。
[cpp]view plain
copy
class
type
type(type& t)
~type() {}
type& operator=(type& t)
intget_data()
};
那麼,比較函式呢?我們可以用乙個全域性函式代替。
[cpp]view plain
copy
inttype_compare(type& t1, type& t2)
至此所有的函式都已經修改好了,那麼bubble_sort的函式也要修改吧,我們看看應該怎麼做?
[cpp]view plain
copy
template
<
typename
data>
void
bubble_sort(data array,
intlength,
int(*compare)(data& , data& ))
} } return
; }
眼看著**都已經使用好了,那下面應該看看怎麼使用了。可以看看下面的**:
[cpp]view plain
copy
272: type t[2] = ;
0040148d push 2
0040148f lea ecx,[ebp-14h]
00401492 call @ilt+25(type::type) (0040101e)
00401497 mov dword ptr [ebp-4],0
0040149e push 1
004014a0 lea ecx,[ebp-10h]
004014a3 call @ilt+25(type::type) (0040101e)
004014a8 mov byte ptr [ebp-4],1
273: bubble_sort(t, 2, type_compare);
004014ac push offset @ilt+20(type_compare) (00401019)
004014b1 push 2
004014b3 lea eax,[ebp-14h]
004014b6 push eax
004014b7 call @ilt+50(bubble_sort) (00401037)
004014bc add esp,0ch
274: return
; 004014bf mov byte ptr [ebp-4],0
004014c3 lea ecx,[ebp-10h]
004014c6 call @ilt+5(type::~type) (0040100a)
004014cb mov dword ptr [ebp-4],0ffffffffh
004014d2 lea ecx,[ebp-14h]
004014d5 call @ilt+5(type::~type) (0040100a)
275: }
我們看到了,簡單的排序已經完成了,函式最終會呼叫bubble_sort函式。泛型雖然複雜,涉及到了函式指標、算術符過載、模板函式等知識,但是只要勇於嘗試,就會使用越來越方便,越來越順手。
問題:
(1) 大家可以嘗試編寫乙個insert_sort的泛型函式?
(2)嘗試編寫乙個二分法的泛型處理函式?
(3)嘗試編寫乙個quick_sort的泛型函式,可能考慮的因素需要多一些?不過也可以嘗試一下哦。
【預告: 下面的部落格會寫一些 關於class技巧的文章】
用彙編的眼光看C (之嵌入彙編)
嵌入式彙編是對純彙編檔案的一種有益補充。通常會有下面幾種情況使用到彙編 1 提高 的工作效率 使用到cpu的一些特殊指令,比如說mmx指令 2 對硬體進行某種特殊的操作,比如說關中斷等,這在核心級的 中是比較常見的。但是我們講究嵌入式彙編的一些基本點和大家一起討論一下,建議大家和我一起做實驗,用事實...
用彙編的眼光看C (之嵌入彙編)
嵌入式彙編是對純彙編檔案的一種有益補充。通常會有下面幾種情況使用到彙編 1 提高 的工作效率 使用到cpu的一些特殊指令,比如說mmx指令 2 對硬體進行某種特殊的操作,比如說關中斷等,這在核心級的 中是比較常見的。但是我們講究嵌入式彙編的一些基本點和大家一起討論一下,建議大家和我一起做實驗,用事實...
用彙編的眼光看C (之嵌入彙編)
嵌入式彙編是對純彙編檔案的一種有益補充。通常會有下面幾種情況使用到彙編 1 提高 的工作效率 使用到cpu的一些特殊指令,比如說mmx指令 2 對硬體進行某種特殊的操作,比如說關中斷等,這在核心級的 中是比較常見的。但是我們講究嵌入式彙編的一些基本點和大家一起討論一下,建議大家和我一起做實驗,用事實...