实现简单的Vector容器

本文详细介绍了如何使用C++自定义实现一个Vector容器,包括构造函数、析构函数、push_back、insert、empty、pop_back、erase、back、show等方法的实现,以及扩容和判满的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<stack>

using namespace std;
 
template<typename _Ty> //模板使得开辟的空间由传入的值类型决定
class Vector
{
public:
	typedef _Ty value_type;  //首先呢我们定义一下值类型
public:
	Vector()//构造函数
	{
		parr = new _Ty[2]();
		cursize = 0;
		totalsize = 2;
	}
	~Vector()//析构函数
	{
		delete[] parr;
		parr = NULL;
	}
	void push_back(const value_type& val)//熟悉Vector容器都知道这是Vector的成员方法
	{
		insert(cursize, val);调用插入函数
	}
 
	void insert(int pos, const value_type& val)//插入函数
	{
		if (pos < 0 || pos > cursize)
		{
			throw std::exception("pos is error!");
		}
		if (full())//判满
		{
			resize();//扩容
		}
 
		int index = cursize;
		for (index; index > pos; index--)
		{
			parr[index] = parr[index - 1];
		}
		parr[pos] = val;
		cursize++;
	}//起到拷贝构造的作用
	bool empty()判空
	{
		return cursize == 0;
	}
	void pop_back()尾删
	{
		erase(cursize - 1);
	}
	void erase(int pos) //Vector的erase(删除)方法
	{
		if (pos < 0 || pos >= cursize)
		{
			throw std::exception("pos is error!");
		}
		if (empty())
		{
			throw std::exception("vector is empty!");
		}
		int index = pos;
		for (index; index < cursize - 1; index++)
		{
			parr[index] = parr[index + 1];
		}
		cursize--;
	}
	_Ty back()
	{
		if (empty())判空
		{
			throw std::exception("vector is empty!");
		}
		return parr[cursize - 1];
	}
	void show()打印函数
	{
		int index = 0;
		for (index; index < cursize; index++)
		{
			std::cout << parr[index] << " ";
		}
		std::cout << std::endl;
	}
private:
	void resize()扩容函数
	{
		_Ty* pnewarr = new _Ty[totalsize * 2]();
		memcpy(pnewarr, parr, sizeof(_Ty)*totalsize);
		delete[] parr;
		parr = pnewarr;
		totalsize *= 2;
	}
	bool full()判满
	{
		return cursize == totalsize;
	}
	_Ty* parr;
	int cursize;//
	int totalsize;
};
 
int main()
{
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值