网易云课堂_C++程序设计入门(下)_第10单元:月映千江未减明 – 模板_第10单元 - 单元作业:OJ编程 - 创建数组类模板

第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() != '\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;
}
上一篇:❤️虚拟化技术❤️之docker技术详解(一)[⭐建议收藏⭐]


下一篇:(2020李宏毅)机器学习Recurrent Neural Network