标签:
1 #include <iostream> 2 using namespace std; 3 4 template<typename Object> 5 class Vector 6 { 7 private: 8 int theSize; //实际数据大小 9 int theCapacity; //实际容器容量大小 10 Object *objects; //基本数组 11 public: 12 enum { SPACE_CAPACITY = 16 }; //默认容量大小 13 14 explicit Vector(int initSize = 0) //单参数构造函数要用explicit()避免类型在后台转换 15 : theSize(initSize), theCapacity(initSize + SPACE_CAPACITY) { 16 objects = new Object[theCapacity]; 17 } 18 Vector(const Vector& rhs) : objects(NULL) { //复制构造函数--调用operator=对已有的Vector进行复制 19 operator = (rhs); 20 } 21 ~Vector() { 22 delete[] objects; 23 } 24 25 const Vector& operator = (const Vector& rhs) //重载赋值运算符 26 { 27 if (this != &rhs) //避免复制自身--混淆检验 28 { 29 delete []objects; //删除旧的内存空间 30 theSize = rhs.size(); //生成同样的样本大小 31 theCapacity = rhs.theCapacity; //生成同样的容量大小 32 33 objects = new Object[capacity()]; //生成与所复制的Vector同样容量的新数组 34 for (int k = 0; k < size(); k++) 35 objects[k] = rhs.objects[k]; 36 } 37 return *this; 38 } 39 40 void resize(int newSize) 41 { 42 if (newSize > theCapacity) //重置大小 43 reserve(newSize * 2 + 1); //新大小 44 theSize = newSize; 45 } 46 47 void reserve(int newCapacity) 48 { 49 if (newCapacity < theSize) //至少和(样本大小)一样大 50 return; 51 52 Object *oldArray = objects; //oldArray--用于复制旧数组内容 53 objects = new Object[newCapacity]; 54 for (int k = 0; k < theSize; k++) 55 objects[k] = oldArray[k]; 56 57 theCapacity = newCapacity; 58 delete []oldArray; 59 } 60 61 Object& operator[] (int index) 62 { 63 return objects[index]; 64 } 65 const Object& operator[] (int index) const 66 { 67 return objects[index]; 68 } 69 70 bool empty() const { 71 return size() == 0; 72 } 73 74 int size() const { 75 return theSize; 76 } 77 int capacity() const { 78 return theCapacity; 79 } 80 void push_back(const Object& x) { 81 if (theSize == theCapacity) 82 reserve(2 * theCapacity + 1); 83 objects[theSize++] = x; 84 } 85 86 void pop_back() { 87 theSize--; 88 } 89 const Object& back() const { 90 return objects[theSize - 1]; 91 } 92 93 typedef Object *iterator; 94 typedef const Object *const_iterator; 95 96 iterator begin() { 97 return &objects[0]; 98 } 99 const_iterator begin() const { 100 return &objects[0]; 101 } 102 iterator end() { //尾后的不存在的指针 103 return &objects[size()]; 104 } 105 const_iterator end() const { 106 return &objects[size()]; 107 } 108 }; 109 110 int main() 111 { 112 Vector<int> test; 113 int data; 114 while (cin >> data) 115 { 116 test.push_back(data); 117 } 118 Vector<int>::iterator it; 119 for (it = test.begin(); it != test.end(); ++it) 120 cout << *it << " "; 121 cout << endl; 122 cout << "pop_one.....\n"; 123 test.pop_back(); 124 cout << test.back() << endl; 125 return 0; 126 }
标签:
原文地址:http://www.cnblogs.com/douzujun/p/5827871.html