1. vector的介绍
vector中文为向量、矢量,在计算机这门学科中我们更习惯于叫它 “顺序表” ,我们在C语言的时候就讲过顺序表,并且用数组实现过它的底层逻辑,所以说这也是我们的老朋友了。不过现在它出现在了 STL 中,被封装成了一个容器,更加方便我们的使用。
vector是用模板实现的,它其中的成员函数与string的类似,分为迭代器有关的、size有关的、数据元素相关的、修改相关的。
声明中的 Alloc allocator 是空间配置器,因为有缺省参数allocator<T> ,所以平时可以不给它传参,空间配置器就是内存池,内存池就是用来管理内存的一个概念,现阶段涉及不到。
2. vector的各种接口
2.1 构造函数
官网资料:vector::vector - C++ Reference
value_type就是第一个模板参数T size_type可以相当于无符号整形但它跟迭代器有关
第一种构造就是不用传参的默认构造,创造一个空的vector容器
第二种构造是构造一个包含n个元素的容器,每个元素都是value_type类型的val。
第三种构造是用迭代器在另一个vector中画出一个范围之后拷贝过去构造
第四种就是拷贝构造
2.2 vector容器的修改操作
简单说一下吧,其实这些成员函数我们在string中都见过了
assgin 重新赋值
push_back 尾插(常用)
pop_back 尾删(常用)
insert 随机位置插入
erase 随机位置或范围删除
swap 交换
这个swap函数也是vector顺序表容器自己的交换方法。
clear 清空容器
2.3 vector容器中数据的访问和遍历
容器数据的访问还是那几样
方括号重载就不说了。
at 返回vector中迭代器位置为n的元素的引用。
front 返回vector容器中首个数据
back 返回vector容器中尾部数据
data 返回指向vector容器内部用来存储其拥有的元素的内存数组的指针
遍历和string类相似,vector容器也是3种遍历方案 operator[ ] 、迭代器遍历 、范围for遍历,其中范围for遍历的底层就是迭代器。
3. sort补充
其实之前我们已经在string的第一节中接触过一次sort函数了
它的第一种重载我们使用过,就是传一段左闭右开的迭代区间 [ first, last ) 然后这个sort就会自动把容器中的数据从小到大排好升序。
其排序的底层算发是快速排序,关于排序相关内容以及手动实现各种排序详见:数据结构·排序-CSDN博客文章浏览阅读781次,点赞28次,收藏27次。本节讲解了各种排序算法,包括直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序。其中详细讲解了希尔排序、快速排序和归并排序,在用分治思想通过递归实现的同时,还尝试用非递归的方式解决,对于快速排序还介绍了三种优化方案https://blog.csdn.net/atlanteep/article/details/136857179?spm=1001.2014.3001.5501 第二种重载有了一个Compare,我们讲这是一个仿函数,至于仿函数是什么后面的章节会将,我们现在会用这个接口就行。
还记得我们C语言阶段的排序函数qsort吗,它的最后一个参数是一个函数指针,这个Compare comp也是类似,往这里传一个可调用对象就可以控制排序的规则。
这个greater就是一个仿函数
它是一个用模板写出来的东西功能就是判断前面的数是否大于
返回值是1,0代表真,假,我们在使用这个greater的时候就像在使用一个函数一样,但是它不是函数,它是一个对象
相对应的还有less用来判断小于
官网资料:less - C++ Reference
用在sort种就是排升序