【C++】vector的模拟实现

基本框架

在模拟实现vector之前我们应该对vector有个基本的框架,可以通过对源代码的分析与了解,实现自己的vector。

第一步:现有大致的类模板,类中的成员变量

第二步:构造函数、析构函数、赋值运算符重载函数、拷贝构造函数这些默认函数

第三步:关注push_back(),reserve(),insert()等接口函数

模拟实现vector

namespace my_vector
{
	template<class T>
	class vector
	{
	public:
		typedef T* iterator;

	private:
		iterator _start;
		iterator _finish;
		iterator _end_of_storage;
	};
}

设置好一个命名空间,类,以及成员变量

		vector()
			:_start(nullptr)
			,_finish(nullptr)
			,_end_of_sorage(nullptr)
		{}

设置一个构造函数,可以选择在初始化变量进行初始化成员变量。

		~vector()
		{
			if (_start)
			{
				delete[] _start;
				_start = _finish = _end_of_storage = nullptr;
			}
		}

设置一个析构函数,注意这里需要对_start进行判空,如果_start为空,则说明_start是是一空指针,则无法进行析构。

		size_t size() const
		{
			return _finish - _start;
		}

设置一个size()函数,用来计算vector的数据个数。

		size_t capacity() const
		{
			return _end_of_storage - _start;
		}

设置一个capacity()函数,用来计算vector的容量大小。

void reserve(size_t n)
{
	if (capacity() < n)
	{
		size_t sz = size();
		T* tmp = new T[n];
		if (_start)
		{
			//memcpy(tmp, _start, sizeof(T) * sz);
			for (size_t i = 0; i < sz; ++i)
			{
				tmp[i] = _start[i];
			}
			delete[] _start;
		}
		_start = tmp;
		_finish = _start + sz;
		_end_of_storage = _start + n;
	}
}

设置一个reserve()函数,可以用来提高容量。这里需要注意的是需要提前知道_start与_finish之间的元素个数,以便设置_finish。

		void push_back(const T& x)
		{
			if (_finish == _en
评论 114
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值