c++中提供的数组并不方便,所以有必要重载一个一维数组类,重载他的+ , -, * ,/ 等功能以及下标操作等
具体实现代码如下:
template<class T>
class Array1D{
public:
Array1D(int size = 0);
Array1D(const Array1D<T> &v); //复制构造函数
~Array1D(){ delete[]element; }
T& operator[](int i)const;
int Getsize(){ return Size; }
Array1D<T>& operator= (const Array1D<T>& v);
Array1D<T> operator+()const;//一元加法操作
Array1D<T> operator+(const Array1D<T>& v);
Array1D operator-()const;
Array1D<T> operator-(const Array1D<T>& v)const;
Array1D<T>operator*(const Array1D<T> &v)const;
Array1D operator+=(const T& x);
private:
int Size;
T* element;
};
template<class T>
Array1D<T>::Array1D(int sz){
if (sz < 0)throw;
Size = sz;
element = new T[Size];
}
template<class T>
Array1D<T>::Array1D(const Array1D<T>& v){
Size = v.Size;
element = new T[Size];
for (int i = 0 l i < Size; i++){
element[i] = v.element[i];
}
}
template<class T>
T& Array1D<T>::operator[](int i)const{
if (i < 0 || i >= Size)throw;
return element[i];
}
template<class T>
Array1D<T> Array1D<T>::operator-(const Array1D<T>& v)const
{
if (Size != v.Size)throw;
Array1D<T> w(Size);
for (int i = 0; i < Size;i++)
{
w.element[i] = element[i] - v.element[i];
}
return w;
}
template<class T>
Array1D<T>& Array1D<T>::operator=(const Array1D<T>& v){
if (this != &v){
Size = v.Size;
delete[]element;
element = new T[Size];
for (int i = 0; i < Size; i++){
element[i] = v.element[i];
}
}
return *this;
}
template<class T>
Array1D<T> Array1D<T>::operator-()const{
Array1D<T> w(Size);
for (int i = 0; i < Size; i++)
{
w.element[i] = -element[i];
}
return w;
}
template<class T>
Array1D<T>& Array1D<T>::operator+=(const T& x){
for (int i = 0; i < Size; i++){
element[i] += x;
}
return *this;
}
template<class T>
Array1D<T> Array1D<T>::operator+(const Array1D<T>& v){
if (Size != v.Size)
{
throw;
}
Array1D<T> w(Size);
for (int i = 0; i < Size;i++)
{
w.element[i] = element[i] + v.element[i];
}
return w;
}
template<class T>
Array1D<T> Array1D<T>::operator+()const{
Array1D<T> w(Size);
for (int i = 0; i < Size; i++)
{
w.element = element[i];
}
return w;
}
以上代码就完成了对c++一维数组的重载。
复杂性: 当T是一个内部c++数据类型时,构造函数和析构函数的复杂性为O(1),当T时一个自定义类型的时候,构造函数和析构函数的复杂性为0(Size)