码迷,mamicode.com
首页 > 其他好文 > 详细

第10单元-网易-【OJ - 创建Array类模板】

时间:2015-08-09 08:25:10      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:模版   vector   array   类型转换   

#include <iostream> 
#include <vector>
#include <limits>
using namespace std;

template<typename T>
class Array{
public:
    Array(vector<T> v);
    ~Array();         //析构函数,释放已经申请到的内存
    void sort();        // 排序,将数组中所有元素由小到大排序
    int seek(T key);    // 查找指定的元素key,返回其所在位置(位置编号从0开始),如果没有找到,则返回 -1
    void display();
private:
    T *data_;//存放数组中所有元素的内存的首地址
    int size_;//数组中元素的数量
};

//选择排序算法
template<typename T>
void Array<T>::sort()
{
    for (int i = size_-1; i >=1; --i)
    {
        T max = data_[0];
        int maxindex = 0;
        for (int j = 1; j <= i; j++)
        {
            if (data_[j] > max)
            {
                max = data_[j];
                maxindex = j;
            }
        }
        if (maxindex != i)
        {
            data_[maxindex] = data_[i];
            data_[i] = max;
        }   
    }
}


//查找元素
template<typename T>
int Array<T>::seek(T key)
{
    int k = -1;
    for (int i = 0; i <= size_; i++)
    {
        if (data_[i]==key)
        {
            k = i;
            break;
        }
    }
    return k;
}

//析构对象
template<typename T>
Array<T>::~Array()
{
    delete []data_;
}

//构造函数-类型转换
template<typename T>
Array<T>::Array(vector<T> v)
{
    size_ = v.size();
    data_ = static_cast<T*> (new T[size_]);
    for (int i = 0; i < size_; i++)
    {
        data_[i] = v[i];
    }
}

//输出数组
template<typename T>
void Array<T>::display()
{
    int i;
    for (i = 0; i < size_; i++) 
    {
        cout << data_[i];
        if (i != size_ - 1)
            cout << " ";  // 输出一个空格
    }
}


int main() 
{
    vector<int> vi;
    int ti;
    vector<double> vd;
    double td;
    vector<char> vc;
    char tc;

    while (cin.get() != ‘\n‘) 
    {
        cin.unget();
        cin >> ti;
        vi.push_back(ti);
    }

    while (cin.get() != ‘\n‘) 
    {
        cin.unget();
        cin >> td;
        vd.push_back(td);
    }

    while (cin >> tc) 
    {
        vc.push_back(tc);
    }

    //类型转换
    Array<int> ai(vi);
    Array<double> ad(vd);
    Array<char> ac(vc);

    cout << ai.seek(10) << endl;
    cout << ad.seek(10.0) << endl;
    cout << ac.seek(‘a‘) << endl;

    ai.sort();
    ad.sort();
    ac.sort();

    ai.display();
    cout << endl;
    ad.display();
    cout << endl;
    ac.display();

    // GCC及VC编译器在调试模式下会暂停,便于查看运行结果
#if ( defined(__DEBUG__) || defined(_DEBUG) )
    cin.ignore(numeric_limits<streamsize>::max(), ‘\n‘);
    cin.get();
#endif
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

第10单元-网易-【OJ - 创建Array类模板】

标签:模版   vector   array   类型转换   

原文地址:http://blog.csdn.net/jkelion/article/details/47372019

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!