main() { CArray a; for(int i = 0; i < 5; ++i) a.push_pack(i); // 动态分配内存 CArray a2, a3; a2 = a; // 重载 "=" for(int i = 0; i < a.length(); ++i) cout << a2[i] << " "; a2 = a3; // a2是空的 for(int i = 0; i < a2.length(); ++i) // a2.length() == 0 cout << a2[i] << " "; // 重载 "[]" cout << endl; a[3] = 100; CArray a4(a); // 复制构造函数 for(int i = 0; i < a4.length(); ++i) cout << a4[i] << " ";}
class CArray { int size; // 元素个数 int *ptr; // 动态分配指针public: CArray(int s = 0); // s代表元素个数 CArray(CArray & a); ~CArray(); void push_back(int v); CArray & operator = (const CArray & a); int length() { return size; } int & CArray::operator[](int i) { return ptr[i]; } // 注意返回值类型};CArray::CArray(int s):size(s) { if(s == 0) ptr = NULL; else ptr = new int[s];}CArray::CArray(CArray & a) { if(!a.ptr) { ptr = NULL; size = 0; return; } ptr = new int[a.size]; memcpy(ptr, a.ptr, sizeof(int) * a.size); size = a.size;}CArray::~CArray() { if(ptr) delete ptr;}CArray & CArray::operator=(const CArray & a) { if (ptr == a.ptr) // 防止a=a这样的赋值 return * this; if(a.ptr = NULL) { if(ptr) delete []ptr; ptr = NULL; size = 0; } if(size < a.size) { // 如果原来空间不够大,重新申请 if(ptr) delete []ptr; ptr = new int[a.size]; } memcpy(ptr, a.ptr, sizeof(int)*a.size); size = a.size; return *this;}void CArray::push_back(int v) { if(ptr) { int * tmpPtr = new int[size+1]; memcpy(tmpPtr, ptr, sizeof(int)*size); delete ptr; ptr = tmpPtr; } else ptr = new int[1]; ptr[size++] = v;}
- 实际上,push_back()可以一次性多申请一些空间,提高效率