这是谭老书上的一个例题,考前复习的时候看到这了,用c代码可能几行就解决了,但是现在正在学习c++,而且我对c++代码的具体书写并不熟悉(一直在写c风格的c++代码),在这里锻炼一下,我对问题进行了扩展,运用类模板可以对不同类型的数组找寻其中的最大元素,在这还特意进行了降序排序,来测试sort()函数在类里面如何使用模板函数cmp。
#include <iostream>
#include <algorithm>#define MAX 1000
using namespace std;
template <typename numtype>
class Array_max
{
public:
Array_max(int a):n(a){}
void set_value();
void sort_array();
void show_max();
private:
numtype a[MAX];
int n;
};
template <typename numtype>
bool cmp(numtype a,numtype b)
{
return a>b;
}
template <typename numtype>
void Array_max<numtype>::set_value()
{
for(int i=0;i<n;i++)
cin>>a[i];
}
template <typename numtype>
void Array_max<numtype>::sort_array()
{
sort(a,a+n,cmp<numtype>);
}
template <typename numtype>
void Array_max<numtype>::show_max()
{
cout<<"Max:"<<a[0]<<endl;
}
int main()
{
int m;
cin>>m;
Array_max<int>case1(m);
case1.set_value();
case1.sort_array();
case1.show_max();
return 0;
}
PS:我比较喜欢类外定义成员函数,因为这样比较好分文件
c++代码的优势在这里可以体现出来:代码重用
只要你的代码足够抽象,足够通用,你可以对其稍加修改就可以解决另一个问题,这是c代码所做不到的,c代码往往针对的是某一个问题。
只要对上面的代码稍加修改,我就可以用它来解决同样是书上的问题:对5个字符串排序,从小到大输出。代码如下:
#include <iostream>
#include <algorithm>
#include <string>
#define MAX 1000
using namespace std;
template <typename numtype>
class Array_max
{
public:
Array_max(int a):n(a){}
void set_value();
void sort_array();
void show_array();
private:
numtype a[MAX];
int n;
};
template <typename numtype>
bool cmp(numtype a,numtype b)
{
return a<b;
}
template <typename numtype>
void Array_max<numtype>::set_value()
{
for(int i=0;i<n;i++)
cin>>a[i];
}
template <typename numtype>
void Array_max<numtype>::sort_array()
{
sort(a,a+n,cmp<numtype>);
}
template <typename numtype>
void Array_max<numtype>::show_array()
{
cout<<a[0];
for(int i=1;i<n;i++)
cout<<' '<<a[i];
cout<<endl;
}
int main()
{
int m;
cin>>m;
Array_max<string>case1(m);
case1.set_value();
case1.sort_array();
case1.show_array();
return 0;
}