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 }