#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
class Array
{
private :
int size;
int low;
int high;
int *arr;
public:
Array(int sz=10);
Array(int l,int h);
Array(const Array &a);
~Array(void);
void operator=(const Array& a);
int& operator[](int index);
void resize(int l,int h);
void resize(int sz);
int arrsize(void)const;
};
Array::Array(int sz)
{
if(sz<=0)
exit(0);
low=0;
high=sz-1;
size=sz;
arr=new int[sz];
}
Array::Array(int l, int h)
{
low=l;
high=h;
size=h-l+1;
arr=new int[size];
}
Array::Array(const Array& a)
{
int n=a.size;
size=n;
arr=new int[n];
int* source=a.arr;
int* destination=arr;
while(n--)
*destination++=*source++;
}
Array::~Array(void)
{
delete[]arr;
}
void Array::operator=(const Array& a)
{
if(this==&a)
return;
int n=a.size;
size=n;
arr=new int[n];
int* s=a.arr;
int* d=arr;
while(n--)
*d++=*s++;
}
int& Array::operator [](int index)
{
if(index<low||index>high)
{
cout<<"error,the index is wrong"<<endl;
exit(0);
}
return arr[index-low];
}
void Array::resize(int sz)
{
if(sz<=0)
exit(0);
if(sz==size)
return;
int* newa=new int[sz];
int n=(sz<=size)?sz:size;
int* s=arr;
int* d=newa;
while(n--)
*d++=*s++;
delete []arr;
arr=newa;
low=0;
high=sz-1;
size=sz;
}
void Array::resize(int l, int h)
{
int sz=h-l+1;
int* newa=new int[sz];
int n=(sz<=size)?sz:size;
int* s=arr;
int* d=newa;
while(n--)
*d++=*s++;
delete []arr;
arr=newa;
low=l;
high=h;
size=sz;
}
int Array::arrsize(void) const
{
return size;
}
int _tmain(int argc, _TCHAR* argv[])
{
Array a(-1,5);
cout<<a.arrsize();
for(int i=-1;i<=5;i++)
{
a[i]=i;
cout<<a[i]<<endl;
}
a.resize(18);
cout<<a.arrsize();
return 0;
}