#include <iostream>
using namespace std;
#include <stdlib.h>
/**
################################
定义
相同类型的数据元素的集合。
################################
*/
/*
一维数组类的定义
*/
template<class Type>
class Array{
Type * elements; //数组存放空间
int ArraySize; //当前长度
void getArray(); //建立数组空间
public:
Array(int Size=4);
Array(const Array<Type>& x);
~Array(){
delete [] elements;
}
//数组复制
Array<Type>& operator = (const Array<Type>& A);
//取值
Type& operator[](int i);
//取数组长度
int Length() const{
return ArraySize;
}
//扩充数组
void ReSize(int sz);
//打印
void Print();
};
/*
一维数组公共操作的实现
*/
template<class Type>
void Array<Type>::getArray(){
//私有函数:创建数组存储空间
elements = new Type[ArraySize];
if( elements==NULL ){
ArraySize = 0;
cerr<<"存储分配出错!!"<<endl;
return;
}
}
template<class Type>
void Array<Type>::Print(){
for(int i=0; i<ArraySize; i++){
cout<<elements[i]<<" ";
}
cout<<endl;
}
template<class Type>
Array<Type>::Array(int sz){
//构造函数
if( sz<=0 ) {
ArraySize = 0;
cerr<<"飞鼠族大小"<<endl;
return;
}
ArraySize = sz;
getArray();
}
//复制构造函数
template<class Type>
Array<Type>::Array(const Array<Type>& x){
int n = ArraySize = x.ArraySize;
elements = new Type[n];
if( elements==NULL ) {
ArraySize = 0;
cerr<<"存储分配出错!!"<<endl;
return;
}
Type * srcptr = x.elements;
Type * destptr = elements;
while( n-- ) //注:++ 优先级大于 *
*destptr++ = *srcptr++;
}
//按数组名即下标i,取数组元素的值
template<class Type>
Type& Array<Type>::operator [](int i) {
if( i<0||i>ArraySize-1 ) {
cerr<<"数组下标越界"<<endl;
exit(1);
}
return elements[i];
}
//扩充数组
template<class Type>
void Array<Type>::ReSize(int sz) {
if(sz>=0 && sz!=ArraySize ) {
Type * newarray = new Type[sz];
//创建新数组
if( newarray==NULL ) {
cerr<<"存储分配出错"<<endl;
exit(1);
}
//按新的大小确定传送元素个数
int n = (sz<=ArraySize)?sz:ArraySize;
//源数组指针
Type * srcptr = elements;
//目标数组指针
Type * destptr = newarray;
//从源数组想目标数组传递
while (n--)
*destptr++ = *srcptr++;
delete [] elements;
elements = newarray;
ArraySize = sz;
}
}
int test1(){
int len = 8;
Array<int> array(len);
for( int i=0; i<len; i++) {
array[i] = i;
}
Array<int> newarray = array;
newarray.Print();
newarray.ReSize(5);
newarray.Print();
return 0;
}