当前位置:   article > 正文

西北农林科技大学2024学年C++面向对象程序设计OJ——T14 安全数组类模板

安全数组类模板

一.题目描述

Description

设计一个安全数组类模板Array<T>,其中包含数组的输入、输出、排序和查找等方法,使用三种类型的数据对其进行测试。

(1)设计构造函数Array<T>::Array(int n),可动态分配n个T类型的存储空间;

(2)设计析构函数Array<T>::~Array()释放内存;

(3)重载输入流运算符istream &operator>>(istream& in, Array<T>& arr)读入n个T类型数据;

(4)重载输出流运算符ostream &operator<<(ostream& out, const Array<T>& arr)输出n个T类型数据;

(5)重载[]运算符,若索引值i越界,则输出“Out of boundary”并退出程序,否则返回第i个数据元素;

(6)基于<algorithm>中的sort函数定义成员函数void Array<T>::sort(),实现数组排序;

(7)设计成员函数int Array<T>::search(T e)const,若查找成功返回非负索引值,否则返回-1;

(8)设计函数模板void Process(Array<T> &a)用于测试数组类模板。

main函数对应测试代码如下:

  1. int main()
  2. {
  3.     string type;
  4.     int n;
  5.     cin >> type >> n;
  6.     if (type=="int")
  7.     {
  8.         Array<int> a(n);
  9.         Process(a);
  10.     }
  11.     else if (type=="double")
  12.     {
  13.         Array<double> a(n);
  14.         Process(a);
  15.     }
  16.     else if (type=="string")
  17.     {
  18.         Array<string> a(n);
  19.         Process(a);
  20.     }
  21.     else
  22.         cout << "Input error!" << endl;
  23.     return 0;
  24. }

二.输入与输出

Input

数据类型type和元素个数n

n个数据元素

索引值pos

查找键值key

Output

排序前数据序列

排序后数据序列

索引值pos对应数据元素

查找到的数据元素索引值

Sample Input 1 

int 5
18 2 4 6 25
2
6

Sample Output 1

18 2 4 6 25
2 4 6 18 25
6
2

Sample Input 2 

double 6
24.5 3.6 18.3 96.4 102.56 88.1
3
102

Sample Output 2

24.5 3.6 18.3 96.4 102.56 88.1
3.6 18.3 24.5 88.1 96.4 102.56
88.1
-1

Sample Input 3 

string 7
dispose campus budget slip bacteria consume blast
7
campus

Sample Output 3

dispose campus budget slip bacteria consume blast
bacteria blast budget campus consume dispose slip
Out of boundary!

三.代码

  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. using namespace std;
  5. template<typename T>
  6. class Array{
  7. int size_;
  8. T *arr;
  9. public:
  10. Array(int n):size_(n){this->arr=new T[n];}
  11. ~Array(){delete[] arr;}
  12. int getsize()const{return this->size_;}
  13. template<typename Ti>
  14. friend istream &operator>>(istream& in,Array<Ti>& arr);
  15. template<typename To>
  16. friend ostream &operator<<(ostream& in,const Array<To>& arr);
  17. void sort_arr(){sort(arr,arr+size_);}
  18. int Search(T e){
  19. for(int i=0;i<size_;i++){
  20. if(arr[i]==e)
  21. return i;
  22. }
  23. return -1;
  24. }
  25. T& operator[](const int index){
  26. if(index<0 || index>=this->size_){
  27. cout<<"Out of boundary!"<<endl;
  28. exit(0);
  29. }
  30. return this->arr[index];
  31. }
  32. };
  33. template <typename T>
  34. void Process(Array<T> &a){
  35. int pos;
  36. T e;
  37. cin>>a;
  38. cout<<a<<endl;
  39. a.sort_arr();
  40. cout<<a<<endl;
  41. cin>>pos;
  42. cout<<a[pos]<<endl;
  43. cin>>e;
  44. cout<<a.Search(e)<<endl;
  45. }
  46. template<typename Ti>
  47. istream &operator>>(istream& in,Array<Ti>& obj){
  48. for(int i=0;i<obj.getsize();i++)
  49. in>>obj.arr[i];
  50. return in;
  51. }
  52. template<typename To>
  53. ostream &operator<<(ostream& out,const Array<To>& obj){
  54. int i;
  55. for(i=0;i<obj.getsize()-1;i++){
  56. out<<obj.arr[i]<<" ";
  57. }
  58. out<<obj.arr[i];
  59. return out;
  60. }
  61. int main()
  62. {
  63. string type;
  64. int n;
  65. cin >> type >> n;
  66. if (type=="int")
  67. {
  68. Array<int> a(n);
  69. Process(a);
  70. }
  71. else if (type=="double")
  72. {
  73. Array<double> a(n);
  74. Process(a);
  75. }
  76. else if (type=="string")
  77. {
  78. Array<string> a(n);
  79. Process(a);
  80. }
  81. else
  82. cout << "Input error!" << endl;
  83. return 0;
  84. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/766247
推荐阅读
相关标签
  

闽ICP备14008679号