⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 array.cpp

📁 里面包含各种数据结构方面的知识,如链表,树,图等 含有vc代码
💻 CPP
字号:
#include <iostream.h>
#include <stdlib.h>

enum ErrorType{InvalidArraySize,MemoryAllocationError,IndexOutOfRange};
char *errorMsg[] = {"Invalid Array Size", "Memory Allocation Error", "Index Out Of Range"};

template <class T> class Array
{
	private:
		T* list;
		int size;
		void Error(ErrorType , int badIndex = 0)const;
	public:
		Array(int sz = 100);
		Array(const Array<T>& a);
		~Array(void);

		Array<T>& operator=(const Array<T>& a);
		T& operator[](int i);
		operator T*(void)const;

		int ListSize(void)const;
		void Resize(int sz);
};

template <class T> 
void Array<T>::Error(ErrorType errorComm, int badIndex)const
{
	cout << errorMsg[errorComm] << endl;
}

template <class T> 
Array<T>::Array(int sz)
{
	if(sz <= 0) Error(InvalidArraySize);
	size = sz;
	list = new T[size];
	if(list == NULL) Error(MemoryAllocationError);
}

template <class T> 
Array<T>::~Array(void)
{
	delete []list;
}

template <class T> 
Array<T>::Array(const Array<T>& a)
{
	int n = a.size;
	size = n;
	list = new T[size];
	if(list == NULL) Error(MemoryAllocationError);

	T* soucePtr = a.list;
	T* destPtr = list;
	while(n--)
		*destPtr++ = *soucePtr++;
}

template <class T> 
Array<T>& Array<T>::operator=(const Array<T>& a)
{
	int n = a.size;
	size = n;
	list = new T[size];
	if(list == NULL) Error(MemoryAllocationError);

	T* soucePtr = a.list;
	T* destPtr = list;
	while(n--)
		*destPtr++ = *soucePtr++;	
}

template <class T> 
T& Array<T>:: operator[](int i)
{
	if(i < 0 || i > size-1)
		Error(IndexOutOfRange, i);
	return list[i];
}

template <class T> 
Array<T>:: operator T*(void)const
{
	return list;
}

template <class T> 
int Array<T>::ListSize(void)const
{
	return size;
}

template <class T> 
void Array<T>::Resize(int sz)
{
	if(sz <= 0) Error(InvalidArraySize);
	if(sz == size) return;

	T* newList = new T[sz];
	if(newList == NULL) Error(MemoryAllocationError);

	int n = (sz <= size) ? sz: size;
	T* soucePtr = list;
	T* destPtr = newList;
	while(n--)
		*destPtr++ = *soucePtr++;

	delete []list;
	list = newList;
	size = sz;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -