STL库vector模拟实现

STL的vector容器是一种动态数组,它实现了在尾部插入或删除元素时,时间复杂度为O(1),而在头部或中部插入或删除元素时,时间复杂度为线性阶O(n)。相比静态数组,vector可以动态扩展内存空间,而不需要像数组那样预先分配固定的内存空间。

vector容器的迭代器是支持随机访问的迭代器,这使得vector在访问元素时具有很高的效率。vector容器提供了许多操作函数,例如push_back()用于在尾部添加元素,erase()用于删除元素,insert()用于在指定位置插入元素等。

在C++中,vector容器的定义方式为:std::vector<T> v;其中,std是命名空间,vector是类名,T是存储元素的类型,v是对象名。可以通过使用push_back()函数或者使用下标运算符[]来向vector中添加或访问元素。

vector容器是一种非常实用的动态数组,它具有高效的插入、删除和访问功能,并且可以动态扩展内存空间。

构造函数和析构函数

         vector()//构造函数
			:_start(nullptr)
			,_finish(nullptr)
			,_endofstorage(nullptr)
		{}

		~vector()//析构函数
		{
			delete[] _start;
			_start = _finish = _endofstorage = nullptr;
		}

获取第一个和最后一个数据

       iterator begin()//第一个位置(迭代器)
		{
			return _start;
		}

		iterator end()//最后一个位置的下一位
		{
			return _finish;
		}

		const_iterator begin() const
		{
			return _start;
		}

		const_iterator end() const
		{
			return _finish;
		}

扩容函数和下标访问

void reserve(size_t n)//扩容函数
		{
			if (n > capacity())
			{
				size_t sz = size();
				T* tmp = new T[n];
				if (_start)
				{    
                     //memcpy会有增容问题(按字节拷贝造成浅拷贝
					//memcpy(tmp, _start, sizeof(T) * sz);
					for(size_t i=0;i<sz;i++)
					{
						tmp[i] = _start[i];//调用operator=,是深拷贝
					}
					delete[] _start;
				}
				_start = tmp;
				_finish = tmp + sz;
				_endofstorage = tmp + n;

			}
		}

		T& operator[](size_t i)//下标访问
		{
			assert(i < size());
			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值