• 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 }
  • 相关阅读:
    策略模式
    Java反射机制
    两个无符号的正大数相加
    MySQL大表优化方案
    造成mysql慢查询的原因
    mysql对于很长的字符列的索引方案
    lyt经典版MySQL基础——函数
    lyt经典版MySQL基础——存储过程
    lyt经典版MySQL基础——变量
    lyt经典版MySQL基础——视图
  • 原文地址:https://www.cnblogs.com/GoldenEllipsis/p/11151170.html
Copyright © 2020-2023  润新知