c++ 找出一个整形数组中元素的最大值

来源:互联网 发布:国际软件 编辑:程序博客网 时间:2024/05/17 01:01

这是谭老书上的一个例题,考前复习的时候看到这了,用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;
}

0 0