C++模板实现Array

浅显易懂,没啥好解释的。代码如下:

#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <assert.h>
using namespace std;
typedef unsigned int UINT;
template<class T>
class Array{
private:
	T* _element;
	UINT _size;
public:
	Array(UINT size){
		this->Array<T>::Array();
		this->reSize(size);
	}
	Array(){
		_element = nullptr;
		_size = 0;
	}
	virtual ~Array(){
		delete[] _element;
		_element = nullptr;
		_size = 0;
	}
	Array(const Array<T>& obj){
		//复制构造
		this->_size = obj._size;
		this->_element = new (std::nothrow) T[obj._size];
		if (this->_element == nullptr){
			cerr << "赋值构造的时候内存分配出错" << endl;
			throw;
			exit(1);
		}
		memcpy(this->_element, obj._element, obj._size* sizeof(T));
	}
	UINT getLength(){ return _size; }
	bool isEmpty(){ return _size == 0 ? true : false; }
	Array<T>& operator  = (const Array<T>& src){
		//赋值符号重载
		T* oldMemory = _element;
		_element = new (std::nothrow) T[src._size];
		if (_element == nullptr){
			cerr << "赋值的时候申请内存失败!" << endl;
			throw;
			return *this;
		}
		memcpy(_element, src._element, src._size * sizeof(T));
		this->_size = src._size;
		delete[] oldMemory;
		return *this;
	}
	T& operator [](const UINT& index){
		//取值符号重载
		if (index >= _size){ cerr << "您对Array的取值访问发生了越界!" << endl; throw; }
		return *(_element + index);
	}
protected:
	bool reSize(UINT size){
		T* oldMemory = _element;
		if (size > 0){
			T* newMemory = new (std::nothrow) T[size];
			memset(newMemory, 0, size*sizeof(T));
			if (newMemory == nullptr){
				return false;
			}
			memcpy(newMemory, oldMemory, _size*sizeof(T));
			_element = newMemory;
		}
		_size = size;
		delete[] oldMemory;
		return true;
	}
};


int main(){
	Array<int> arr(10);
	Array<int> arr1(20);
	for (UINT i = 0; i < arr.getLength(); i++){
		arr[i] = i;
	}
	for (UINT i = 0; i < arr1.getLength(); i++){
		arr1[i] = i;
	}
	arr = arr1;
	for (UINT i = 0; i < arr.getLength(); i++){
		cout << arr[i] << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}

运行结果:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值