说到模板,我们得先来看看重载。
先让我们来求一个一维数组的最大值,这里我们用到了重载:
-
#include <iostream>
-
int getmax(int const *a, unsigned size);
-
char getmax(char const *a, unsigned size);
-
-
int main()
-
{
-
int num[] = {4, 9, 2, 7, 5, 6};
-
char abc[] = {'d', 'c', 's', 'j'};
-
std::cout << getmax(num, 6) << std::endl;
-
std::cout << getmax(abc, 4) << std::endl;
-
return 0;
-
}
// 求整形最大值
-
char getmax(char const *a, unsigned size)
-
{
-
char max = a[0];
-
for (unsigned i = 1; i < size; i)
-
{
-
if (a[i] > max)
-
{
-
max = a[i];
-
}
-
}
-
return max;
-
}
下面是用 python 实现求一维数组的最大值:
-
def getmax(a):
-
maxtemp = a[0]
-
for temp in a:
-
if temp > maxtemp:
-
maxtemp = temp
-
-
return maxtemp
-
print getmax([1, 2, 8, 5])
-
print getmax(['w', 'h', 's'])
可以看出,无论是整形的还是字符型的,用一个函数就都能搞定了。是不是很简洁,这就是模板的魅力,现在我们用 c 也来实现下这个模板:
-
#include <iostream>
-
-
// 函数模板
-
template <typename type>
-
type getmax(type *a, unsigned size)
-
{
-
type temp = a[0];
-
for (unsigned i = 1; i < size; i)
-
{
-
if (temp < a[i])
-
{
-
temp = a[i];
-
}
-
}
-
return temp;
-
}
-
-
int main()
-
{
-
int a[] = {1 ,2, 5, 4, 12, 3, 7, 6, 8, 9};
-
char b[] = {'a', 'y', 'b', 't', 'g', 'u'};
-
-
std::cout << getmax<int>(a, 10) << std::endl;
-
std::cout << getmax<char>(b, 6) << std::endl;
-
-
return 0;
-
}
从上面的函数可以看出,函数模板简化了程序的实现,是程序更容易理解,更加方便。当然了,c 比 python 的实现还是有些复杂的,那是因为 python 是弱类型语言。但是无论如何我们都可以看出模板的魅力。
阅读(2765) | 评论(0) | 转发(0) |