c++ 长度可变的int数组类
/************************************************************************
*功能:1 数组元素个数可以在初始化该对象的时候指定
* 2:可以动态玩数组中添加元素
* 3:使用该类时,不用操心动态内存分配、释放问题
* 4:能够像使用数组那样来使用动态数组类对象,如可以通过下标来访问元素。
****************************************************************************/
#include <iostream> #include <cstring> using namespace std; class CArray { private: int size; int *ptr; public: CArray(int s=0); CArray(const CArray &); void push_back(int v); CArray & operator=(const CArray &); int length(); int &operator[](int i) { return ptr[i]; } ~CArray(); }; int CArray::length() { return size; } //CArray::CArray(int s=0):size(s) CArray::CArray(int s):size(s) { if(s==0) ptr=NULL; else ptr=new int[s]; } CArray::CArray(const CArray & s)//注意参数设置为const,防止意外更改 { if(s.size==0) { size=0; ptr=NULL; return; } ptr=new int[s.size]; memcpy(ptr,s.ptr,sizeof(int)*s.size); size=s.size; } void CArray::push_back(int v) { if(ptr) { int * tempPtr=new int[size+1]; memcpy(tempPtr,ptr,size*sizeof(int)); delete [] ptr; ptr=tempPtr; } else ptr=new int[1]; ptr[size++]=v; } CArray & CArray::operator=(const CArray & s)//注意参数使用const。 { if(s.ptr==ptr) return *this; if(ptr)//一定要注意防止delete空指针 delete []ptr; if(s.ptr) { ptr=new int[s.size]; memcpy(ptr,s.ptr,s.size*sizeof(int)); size=s.size; } else { ptr=NULL; size=0; } return *this; } CArray::~CArray() { if(ptr) delete [] ptr; } int main() { CArray a; for(int i=0;i<5;i++) a.push_back(i); //a[0]=11111; // for(int i=0;i<a.length();i++) // cout<<a[i]<<" "; // cout<<"aaaa\n"; CArray a2,a3; a2=a; for(int i=0;i<a.length();i++) cout<<a2[i]<<" "; a2=a3; for(int i=0;i<a2.length();i++) cout<<a2[i]<<" "; cout<<endl; a[3]=100; CArray a4(a); for(int i=0;i<a4.length();i++) { cout<<a4[i]<<" "; } return 0; }