有序数组(类模板)
有序数组(类模板)
实现一个类模板,它可以接受一组数据,能对数据排序,也能输出数组的内容。每行输入的第一个数字为0,1,2或3:为0时表示输入结束; 为1时表示将输入整数,为2时表示将输入有一位小数的浮点数,为3时表示输入字符。
如果第一个数字非0,则接下来将输入一个正整数,表示即将输入的数据的数量。
从每行第三个输入开始,依次输入指定类型的数据。
类模板:
1 2 | template < class T> class MyArray |
裁判测试程序样例:
#include <iostream> using namespace std; /* 请在这里填写答案 */ template<class T> MyArray<T>::~MyArray(){ delete[] data;} template<class T> bool MyArray<T>::check(){ int i; for(i=0;i<size-1;i++) if(data[i]>data[i+1]) { cout<<"ERROR!"<<endl;return false;} return true; } int main( ) { MyArray<int> *pI; MyArray<float> *pF; MyArray<char> *pC; int ty, size; cin>>ty; while(ty>0){ cin>>size; switch(ty){ case 1: pI = new MyArray<int>(size); pI->sort(); pI->check(); pI->display(); delete pI; break; case 2: pF = new MyArray<float>(size); pF->sort(); pF->check(); pF->display(); delete pF; break; case 3: pC = new MyArray<char>(size); pC->sort(); pC->check(); pC->display(); delete pC; break; } cin>>ty; } return 0; }
1 3 2 3 1 2 4 1.5 2.6 3.7 0.5 3 2 A a 0
输出样例:
1 2 3 0.5 1.5 2.6 3.7 A a
题解:
1 template<class T> 2 class MyArray { 3 public: 4 MyArray (int s) {//构造函数 5 size = s; 6 data = new T[size]; 7 for (int i = 0; i < size; i++) { 8 cin >> data[i]; 9 } 10 } 11 ~MyArray(); 12 bool check();//判断数组是否顺序,不是则输出ERROR 13 void sort() {//冒泡排序 14 for (int i = 0; i < size - 1; i++) { 15 for (int j = 0; j < size - i - 1; j++) { 16 if (data[j] > data[j + 1]) { 17 T temp = data[j]; 18 data[j] = data[j + 1]; 19 data[j + 1] = temp; 20 } 21 } 22 } 23 } 24 void display() { 25 for (int i = 0; i < size; i++) { 26 if (i != 0) { 27 cout << " " << data[i]; 28 } else { 29 cout << data[i]; 30 } 31 } 32 } 33 private: 34 int size; 35 T *data; 36 };
1 #include <iostream> 2 using namespace std; 3 4 template<class T> 5 class MyArray { 6 public: 7 MyArray (int s) {//构造函数 8 size = s; 9 data = new T[size]; 10 for (int i = 0; i < size; i++) { 11 cin >> data[i]; 12 } 13 } 14 ~MyArray(); 15 bool check();//判断数组是否顺序,不是则输出ERROR 16 void sort() {//冒泡排序 17 for (int i = 0; i < size - 1; i++) { 18 for (int j = 0; j < size - i - 1; j++) { 19 if (data[j] > data[j + 1]) { 20 T temp = data[j]; 21 data[j] = data[j + 1]; 22 data[j + 1] = temp; 23 } 24 } 25 } 26 } 27 void display() { 28 for (int i = 0; i < size; i++) { 29 if (i != 0) { 30 cout << " " << data[i]; 31 } else { 32 cout << data[i]; 33 } 34 } 35 } 36 private: 37 int size; 38 T *data; 39 }; 40 41 template<class T>//析构函数类外实现 42 MyArray<T>::~MyArray() { 43 delete[] data; 44 } 45 46 template<class T>//检查是否为顺序输出 47 bool MyArray<T>::check() { 48 int i; 49 for (i = 0; i < size - 1; i++) 50 if (data[i] > data[i + 1]) { 51 cout << "ERROR!" << endl; 52 return false; 53 } 54 return true; 55 } 56 57 int main( ) { 58 MyArray<int> *pI; 59 MyArray<float> *pF; 60 MyArray<char> *pC; 61 int ty, size; 62 cin >> ty; 63 while (ty > 0) { 64 cin >> size; 65 switch (ty) { 66 case 1: 67 pI = new MyArray<int> (size); 68 pI->sort(); 69 pI->check(); 70 pI->display(); 71 delete pI; 72 break; 73 case 2: 74 pF = new MyArray<float> (size); 75 pF->sort(); 76 pF->check(); 77 pF->display(); 78 delete pF; 79 break; 80 case 3: 81 pC = new MyArray<char> (size); 82 pC->sort(); 83 pC->check(); 84 pC->display(); 85 delete pC; 86 break; 87 } 88 cin >> ty; 89 } 90 return 0; 91 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)