Array类模板

  1 #include <iostream> 
  2 #include <vector>
  3 #include <limits>
  4 using namespace std;
  5 
  6 template <typename T>
  7 class Array{
  8     T* data_;   
  9     int size_; 
 10 public:
 11     Array(vector<T> v) ;
 12     // 析构函数,释放已经申请到的内存
 13     ~Array();
 14     // 排序,将数组中所有元素由小到大排序
 15     void sort();    
 16     // 查找指定的元素key,返回其所在位置(位置编号从0开始); 如果没有找到,则返回 -1
 17     int seek(T key);
 18     void display();
 19 };
 20 
 21 template <typename T>
 22 Array<T>::Array(vector<T> v) { 
 23     size_ = v.size();
 24     data_ = static_cast<T*> (new T[size_]);
 25     for (int i = 0; i < size_; i++) {
 26         data_[i] = v[i];
 27     }
 28 }
 29 // 析构函数,释放已经申请到的内存
 30 template <typename T>
 31 Array<T>::~Array(){
 32     delete data_;
 33 };           
 34 // 排序,将数组中所有元素由小到大排序
 35 template <typename T>
 36 void Array<T>::sort(){
 37     for(int i=1; i<size_; ++i){/*第0个元素有序,从第1个元素向右无序*/
 38         int j=i-1;
 39         T key=data_[i];/*保存第i个元素,左边的元素i-1*/
 40         while(j>=0 && key<data_[j]){/*保存的元素key与之前的元素从右向左逐个比较*/
 41             data_[j+1]=data_[j];/*移动(向后赋值)*/
 42             j--;
 43         }
 44         data_[j+1]=key;/*恢复正确值j+1*/
 45     }    
 46 }; 
 47 
 48 // 查找指定的元素key,返回其所在位置(位置编号从0开始); 如果没有找到,则返回 -1
 49 template <typename T>
 50 int Array<T>::seek(T key){
 51     int i = 0;
 52     while( i <= size_ && data_[i]!= key )
 53         i++;
 54     if ( i > size_ )  return -1; /* 如果没找到,返回错误信息 */
 55     else  return i;  /* 找到后返回的是存储位置 */
 56 };
 57     
 58 template <typename T>
 59 void Array<T>::display() {
 60     for (int i = 0; i < size_; i++) {
 61         cout << data_[i];
 62         if (i != size_ - 1)
 63             cout << " ";  // 输出一个空格
 64     }
 65 }
 66 
 67 //需要ctr + z
 68 /* 
 69 1 2 3 3 2 1
 70 1.1 2.0 3.3 2.00001 1.1
 71 d f z E f a g 
 72 */
 73 
 74 int main() {
 75     vector<int> vi;
 76     int ti;
 77     vector<double> vd;
 78     double td;
 79     vector<char> vc;
 80     char tc;
 81  
 82     while (cin.get() != '
') {
 83         cin.unget();
 84         cin >> ti;
 85         vi.push_back(ti);
 86     }
 87  
 88     while (cin.get() != '
') {
 89         cin.unget();
 90         cin >> td;
 91         vd.push_back(td);
 92     }
 93  
 94     while (cin >> tc) {
 95         vc.push_back(tc);
 96     }
 97  
 98     Array<int> ai(vi);
 99     Array<double> ad(vd);
100     Array<char> ac(vc);
101  
102     /* 查找 */
103     cout << ai.seek(10) << endl;
104     cout << ad.seek(10.0) << endl;
105     cout << ac.seek('a') << endl;
106  
107     ai.sort();
108     ad.sort();
109     ac.sort();
110   
111     ai.display();
112     cout << endl;
113     ad.display();
114     cout << endl;
115     ac.display();
116  
117 // GCC及VC编译器在调试模式下会暂停,便于查看运行结果
118 #if ( defined(__DEBUG__) || defined(_DEBUG) )
119     cin.ignore(numeric_limits<streamsize>::max(), '
');
120     cin.get();
121 #endif 
122     return 0;
123 }
原文地址:https://www.cnblogs.com/GoldenEllipsis/p/11151170.html