• 网易云课堂_C++程序设计入门(下)_第10单元:月映千江未减明 – 模板_第10单元


    第10单元 - 单元作业:OJ编程 - 创建数组类模板

    �返回
     

    温馨提示:

    1.本次作业属于Online Judge题目,提交后由系统即时判分。

    2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。

    本单元作业练习创建模板类。
    单元作业会涉及冒泡排序、线性查找等算法。如果对排序、查找不熟悉,可以自行baidu或者google

    依照学术诚信条款,我保证此作业是本人独立完成的。

    1
    编写一个数组类模板 Array,能够存储不同类型的数组元素、对数组元素进行查找、排序(5分)
    时间限制:500ms内存限制:32000kb
    #include <iostream> 
    #include <vector>
    #include <limits>
    
    using namespace std;
    
    template <typename T>
    class Array
    {
    public:
    	//2. Array类的构造函数如下:
    	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];
    		}
    	}
    
    	//3. 需编写的Array类的其它三个函数如下:
    	~Array();           // 析构函数,释放已经申请到的内存
    	void sort();        // 排序,将数组中所有元素由小到大排序
    	int seek(T key);    // 查找指定的元素key,返回其所在位置(位置编号从0开始); 如果没有找到,则返回 -1
    
    	//4. Array类的 display函数如下:
    	void display() {
    		int i;
    		for (i = 0; i < size_; i++) {
    			cout << data_[i];
    			if (i != size_ - 1)
    				cout << " ";  // 输出一个空格
    		}
    	}
    
    private:
    	//1. Array类有2个私有数据成员:
    	T* data_;   //存放数组中所有元素的内存的首地址
    	int size_;   //数组中元素的数量
    };
    
    template<typename T>
    Array<T>::~Array()// 析构函数,释放已经申请到的内存
    {
    	delete[]data_;
    }
    
    template<typename T>
    void Array<T>::sort()// 排序,将数组中所有元素由小到大排序
    {
    	for (int i = 0; i < size_ - 1; i++)
    	{
    		for (int j = 0; j < size_ - 1 - i; j++)
    		{
    			if (data_[j] > data_[j + 1])
    			{
    				T temp = data_[j];
    				data_[j] = data_[j + 1];
    				data_[j + 1] = temp;
    			}
    		}
    	}
    }
    
    template<typename T>
    int Array<T>::seek(T key)// 查找指定的元素key,返回其所在位置(位置编号从0开始); 如果没有找到,则返回 -1
    {
    	for (int i = 0; i < size_; i++)
    	{
    		if (key == data_[i])
    		{
    			return i;
    		}
    	}
    
    	return -1;
    }
    
    int main() {
    	vector<int> vi;
    	int ti;
    	vector<double> vd;
    	double td;
    	vector<char> vc;
    	char tc;
    
    	while (cin.get() != '
    ') {
    		cin.unget();
    		cin >> ti;
    		vi.push_back(ti);
    	}
    
    	while (cin.get() != '
    ') {
    		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(), '
    ');
    	cin.get();
    #endif
    	return 0;
    }
    
  • 相关阅读:
    JS获取元素的子元素
    js iframe
    获取窗口句柄
    python 从PDF中提取附件
    xlwings 使用方法
    基于KNN的发票识别
    爬取漫画网站并进行图片拼接
    用python实现对元素的长截图
    Head First C 第三章总结
    Ruby on Rails Tutorial 第八章笔记 基本登陆功能
  • 原文地址:https://www.cnblogs.com/denggelin/p/7138851.html
Copyright © 2020-2023  润新知