C++实现自定义vector以及allocator

前言

不知道大家有没有这种感觉,学习了一段时间后,总想着自己能够实现一些标准库里已经提供的东西,比如说STL容器vector、比如数据类型string
一方面是对这个知识可以有进一步的一个认识和了解,另一方面也可以检验自己的掌握程度。
基于此,我们今天实现自定义的vector

初步实现

通过包含头文件#include <vector>转到文档,我们可以查看系统自带vector的实现:
在这里插入图片描述
主要包含了三个指针:

  1. 指向数组起始位置的指针;
  2. 指向数组中最后一个有效元素位置的后继位置;
  3. 指向数组空间的后继位置。

了解了这些后,我们就可以自定义vector了:
代码如下:

template<typename T>
class vector
{
   
public:
	vector(int size = 10)
	{
   
		_first = new T[size];
		_last = _first;
		_end = _first + size;
	}
	~vector()
	{
   
		delete[]_first;
		_first = _end = _last = nullptr;
	}
	vector(const vector<T>& rhs)
	{
   
		int size = rhs._end - rhs._first;
		_first = new T[size];
		int len = rhs._last - rhs._first;
		for (int i = 0; i < len; ++i)
		{
   
			_first[i] = rhs._first[i];
		}
		_last = _first + len;
		_end = _first + size;
	}
	vector<T>& operator=(const vector<T>& rhs)
	{
   
		if (this == &rhs)
			return *this;

		delete[]_first;


		int size = rhs._end - rhs._first;
		_first = new T[size];
		int len = rhs._last - rhs._first;
		for (int i = 0; i < len; ++i)
		{
   
			_first[i] = rhs._first[i];
		}
		_last = _first + len;
		_end = _first + size;
		return *this;
	}
	void push_back(const T& val) // 向容器末尾添加元素
	{
   
		if (full())
			expand();
		*_last++ = val;  
	}
	void p
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值