向量的插入与删除:

定义一个向量(vector)模板类,实现向量的初始化、插入、删除操作:

  1 #include "stdafx.h"
  2 #include <iostream>
  3 using namespace std;
  4 #define default_capacity 3
  5 template <typename T>
  6 class vector
  7 {
  8 private:
  9     int size;
 10     int capacity;
 11     T* elem;
 12 public:
 13     vector();
 14     void expand();
 15     void shrink();
 16     void insert(T &e,int i);
 17     void remove(int i);
 18     void print();
 19     T & operator[](int r);  //重载下标操作符,可以类似于数组形式引用各元素
 20     int getsize();
 21     int binsearch();
 22 };
 23 template <typename T>
 24 vector <T>::vector()
 25 {
 26     capacity = default_capacity;
 27     elem = new T[capacity];
 28     size = 0;
 29 }
 30 
 31 template <typename T>
 32 void vector<T>::expand()
 33 {
 34     if (size < capacity) return;    //规模小于容量
 35     T* oldelem = elem;
 36     elem = new T[capacity <<=1];
 37     for (int i = 0;i < size;i++)
 38         elem[i] = oldelem[i];
 39     delete[] oldelem;
 40 }
 41 
 42 template <typename T>
 43 void vector<T>::shrink()
 44 {
 45     if (capacity < default_capacity)
 46     {
 47         return;
 48     }//容量小于初始容量
 49     if ((size * 4) <= capacity)
 50     {
 51         T *oldelem = elem;
 52         elem = new T[capacity >>= 1];
 53         for (int i = 0;i < size;i++)
 54             elem[i] = oldelem[i];
 55         delete[]oldelem;
 56     }
 57 }
 58 
 59 template <typename T>
 60 void vector<T>::insert(T&e,int i)
 61 {
 62     expand();
 63     for (int j = size;j > r;j++)
 64     {
 65         elem[i] = elem[i - 1];
 66     }
 67     elem[i] = e;
 68     size++;
 69 }
 70 
 71 template <typename T>
 72 void vector<T>::remove(int i)
 73 {
 74     int j;
 75     T e = elem[i];
 76     for (j = i + 1;j < size;j++)
 77     {
 78         elem[j - 1] = elem[j];
 79     }
 80     size--;
 81     shrink();
 82     return e;
 83 }
 84 
 85 template <typename T>
 86 void vector<T>::print()
 87 {
 88     int i;
 89     for (i = 0;i < size;i++)
 90         cout << elem[i] << endl;
 91     cout << endl;
 92 }
 93 
 94 template <typenmae T>
 95 T & vector<T>::operator[](int r)
 96 {
 97     return elem[r];
 98 }
 99 
100 template <typename T>
101 int vector<T>::getsize()
102 {
103     return size;
104 }
105 
106 template <typename T>
107 int vector<T>::binsearch(T *A,T const& e,T lo,t hi)
108 {
109     while (lo < hi)
110     {
111         T mi = (lo + hi) >> 1;
112         if (e < A[mi])hi = mi;
113         else if (A[mi] < e)lo = mi + 1;
114         else return mi;
115     }
116     return -1;   //查找失败
117 }

 

posted @ 2017-06-24 13:32  稻草人部落  阅读(522)  评论(0编辑  收藏  举报