c++序列式容器(一):Vector

1. 概述

Vector维护的是一个连续的线性空间,有三个比较重要的指针,start指向目前使用空间的头,finish指向目前使用空间的尾,end_of_storage指向目前可用空间的尾。增加新元素的时候,如果备用空间不够,会将容量扩容到两倍。会经历“重新配置,元素移动,释放原空间”等过程,因此,扩容的时候效率会比较低,还需注意扩容后外部代码保存的iterator指针指向的还是旧的节点指针。
内存结构如下图:
在这里插入图片描述

2. 优缺点

2.1 优点

· 维护一段连续的内存,类似数组,但可以进行动态操作。
· 随机访问方便,支持[]操作符和vector.at()

2.2 缺点

· 在内部进行插入删除操作效率低
· 当动态添加的数据超过vector默认分配的大小时要进行整体的重新分配,拷贝和释放

3.主要方法

3.1 pop_back

	// 将尾端元素拿掉,并调整大小
	void pop_back(){
		--finish;     			//将尾端元素指针前移一格,表示丢弃尾端元素
		destroy(finish);    //进行释放
	}

3.2 erase

	// 清除[first,last)中的所有元素
	iterator erase(iterator first, iterator last){
		iterator i = copy(last, finish, first);   // 将last到finish的内存拷贝至first起始处
		destroy(i, finish);
		finish = finish - (last - first);
		return first;
	}

3.3 insert

insert方法在插入时,会判断当前备用空间是否充足,不足的时候会进行扩容,并将插入节点前后的数据分别拷贝至对应区域,然后填充要插入的数据。

发布了12 篇原创文章 · 获赞 1 · 访问量 124

猜你喜欢

转载自blog.csdn.net/formst001/article/details/104819558
今日推荐