Vector(一)

1.STL:C++中的一个标准模板库,分为十个容器。

STL中的vector容器:      

2.vector是一个矢量容器,是对数组进行包装之后的,功能和数组较为相似。

     数组:分配的是静态空间。

     vector:分配的是动态空间。

3.vector能够像容器一样存放各种类型的对象。

     扩容:STL的vector每次扩充容量时,新的容量都是前一次的两倍。把之前的数据复制到新的数组中,再把之前的内存释放,这样就能减少内存的浪费.

4.vector完整代码:

#include<iostream>

template<typename T>
class Vector
{
public:
	Vector()   //构造函数  
	{
		pvec = new T[1]();  //第一次就开辟一个,之后不够就进行扩容
		curlen = 0;     //当前长度为0
		totallen = 1;   //将总长度设为1
	}
	bool IsEmpty()   //判空  判空一般是对外的
	{
		return curlen == 0;
	}
	void push_back(T val)   //尾插
	{
		if (IsFull())    //判满   
		{
			resize();
		}
		pvec[curlen++] = val;
	}
	void pop_back()   //尾出
	{
		if (IsEmpty())
		{
			return;
		}
		curlen--;   //将最后一个值变得无效
	}

	void insert(int pos, T val)    //按位置插入
	{
		if (pos <0 || pos > curlen)
		{
			return;
		}
		if (IsFull())
		{
			resize();
		}

		int index = curlen - 1;
		for (index; index >= pos; index--)
		{
			pvec[index + 1] = pvec[index];
		}

		pvec[pos] = val;
		curlen++;
	}
	void erase(int pos)    //按位置删除
	{
		if (pos < 0 || pos > curlen)
		{
			return;
		}
		int index = pos;
		for (index; index < curlen - 1; index++)
		{
			pvec[index] = pvec[index + 1];
		}
		curlen--;
	}
	~Vector()   //析构
	{
		delete[] pvec;
		pvec = NULL;
	}
	void Show()
	{
		for (int i = 0; i < curlen; ++i)
		{
			std::cout << pvec[i] << " ";
		}
		std::cout << std::endl;
	}
public:
	void resize(int size)  //扩容,按自己意愿size扩容
	{
		T* pnewspace = new T[size]();
		memcpy(pnewspace, pvec, curlen*sizeof(T));
		delete[] pvec;
		pvec = pnewspace;
		totallen = size;
	}
private:
	bool IsFull()    //判满一般是对内的
	{
		return curlen == totallen;
	}
	void resize()   //以倍数扩容
	{
		T* pnewspace = new T[totallen * 2]();
		memcpy(pnewspace, pvec, curlen*sizeof(T));
		delete[] pvec;
		pvec = pnewspace;
		totallen *= 2;
	}
private:
	T* pvec;
	int curlen;  //当前元素的个数   下一个能插入元素的下标位置
	int totallen;
};

int main()
{
	Vector<int> vec;
	for (int i = 0; i < 10; i++)
	{
		vec.push_back(i + 1);
	}
	vec.pop_back();
	vec.insert(4, 40);
	vec.erase(6);
	vec.Show();
	return 0;
}

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值