从汇编的眼光看C++(之泛型编程)(一)

2014-11-24 12:43:51 · 作者: · 浏览: 2

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

泛型编程其实不难。本质上说,泛型编程就是让通用的算法应用到所有的数据类型。具体来说,int是我们熟悉的整数类型。那么一般情况下,如果我们写一个int整数的排序算法,应该怎么写呢?大家可以自己试试?下面的代码是我的一个范例;

void bubble_sort(int array[], int length)

{

int temp = 0;

int outer = 0;

int inner = 0;

assert(NULL != array && 0 != length);

for(outer = length -1; outer >= 1; outer --)

{

for(inner = 0; inner <= outer; inner ++)

{

if(array[inner] > array[inner + 1])

{

temp = array[inner];

array[inner] = array[inner + 1];

array[inner + 1] = temp;

}

}

}

return;

}

void bubble_sort(int array[], int length)

{

int temp = 0;

int outer = 0;

int inner = 0;

assert(NULL != array && 0 != length);

for(outer = length -1; outer >= 1; outer --)

{

for(inner = 0; inner <= outer; inner ++)

{

if(array[inner] > array[inner + 1])

{

temp = array[inner];

array[inner] = array[inner + 1];

array[inner + 1] = temp;

}

}

}

return;

} 如果把数据类型改成通用的数据类型,你需要做什么呢?两个:(1)算术符"="重载;(2)比较函数。下面就是一个设计的class类型。

class type

{

int data;

public:

type(int value = 0): data(value) {}

type(type& t) {data = t.get_data();}

~type() {}

type& operator=(type& t) {data = t.get_data(); return *this;}

int get_data() {return data;}

};

class type

{

int data;

public:

type(int value = 0): data(value) {}

type(type& t) {data = t.get_data();}

~type() {}

type& operator=(type& t) {data = t.get_data(); return *this;}

int get_data() {return data;}

}; 那么,比较函数呢?我们可以用一个全局函数代替。

int type_compare(type& t1, type& t2)

{

return t1.get_data() > t2.get_data() 1 : 0;

}

int type_compare(type& t1, type& t2)

{

return t1.get_data() > t2.get_data() 1 : 0;

} 至此所有的函数都已经修改好了,那么bubble_sort的函数也要修改吧,我们看看应该怎么做?

template

void bubble_sort(data array[], int length, int (*compare)(data& , data& ))

{

data temp;

int outer = 0;

int inner = 0;

assert(NULL != array && 0 != length);

for(outer = length -1; outer >= 1; outer --)

{

for(inner = 0; inner <= outer; inner ++)

{

if(compare(array[inner], array[inner+1]))

{

temp = array[inner];

array[inner] = array[inner + 1];

array[inner + 1] = temp;

}

}

}

return;

}

template

void bubble_sort(data array[], int length, int (*compare)(data& , data& ))

{

data temp;

int outer = 0;

int inner = 0;

assert(NULL != array && 0 != length);

for(outer = length -1; outer >= 1; outer --)

{

for(inner = 0; inner <= outer; inner ++)

{

if(compare(array[inner], array[inner+1]))

{

temp = array[inner];

array[inner] = array[inner + 1];

array[inner + 1] = temp;

}

}

}

return;

} 眼看着代码都已经使用好了,那下面应该看看怎么使用了。可以看看下面的代码:

272: type t[2] = {type(2), type(1)};

0040148D push