STL之vector

今天想学一下stl里面的向量容器vector,写一下它的j简单实现方式:

template<typename T>
class CVector
{
public:
	//vector的默认构造函数不开辟内存的
	CVector()::mpVec(NULL),mEnd(0),mlast(0){}
	~CVector()
	{
		delete []mpVec;//释放空间
		mpVec = NULL;
	}
	void push_back(const T &val)
	{
		if(full())
		{
			cout<<"resize max"<<endl;
			resizeMem();//空间满了就扩容
		}
		mpVec[mLast++] = val;//后插添加元素
	}
	void pop_back()
	{
		if(!empty())
		{
			--mLast;//出元素时并不释放其空间
		}
	}
	int size()const
	{
		return mLast;
	}
	bool full()const
	{
		return mLast == mEnd;
	}
	bool empty()const
	{
		return mLast == 0;
	}
	void reserve(int size)
	{
		//在默认构造函数vector上预留空间
		mpVec = new T[100];
		mEnd = size;
		mLast = 0;
	}
	void resize(int size)
	{
		//在默认构造的vector上resize
		mpVec = new T[100];
		mEnd = size;
		mLast = size;
	}
	class iterator//迭代器
	{
	public:
		iterator(T *ptr = NULL):_ptr(ptr){}
		bool operator !=(const iterator &it)
		{
			return _ptr != it._ptr;
		}
		void operator++()
		{
			++_ptr;
		}
		T&operator*()
		{
			return *_ptr;
		}
	private:
		T *_ptr;
	};
	iterator begin()
	{
		return mpVec;
	}
	iterator end()
	{
		return mpVec + suze();
	}
	T*mpVec;
	int mEnd;
	void resizeMem()
	{
		if(mpVec == NULL)
		{
			mpVec = new T[1];
			mEnd = 1;
			mLast = 0;
		}
		else
		{
			//resize只考虑容器满了以后,内存2倍增长的情况
			T *ptmp = new T[2*size()];
			memcpy(ptmp,mpVec,sizeof(T)mLast);
			mEnd*=2;
			delete []mpVec;
			mpVec = ptmp;
		}
	}

};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值