导图
vector
vector是什么东东呢?就是它字面意思,向量。怎么理解呢?高中数学中我们学了能表示二维平面的中某一点的向量<x,y>,以及三维空间中表示某一点的向量<x,y,z>。到了大学,我们更加了解到<>中有多少个数字就能表示多少维度空间中的一点。c++借鉴并扩展了这个表示方法,用它来表示同种类型元素的聚集(我之所以不说是“集合”,是因为集合是元素不可重复的)。vector是STL容器的一种,因此它具有理论上存储无限元素的能力(这主要取决于内存大小的啦~)。vector涉及到模板以及一些更深的东西,但由于它的易用性及良好性能不得不提前拿出来遛一遛~
初始化
记得高中物理老师说过一句话:万变不离其宗。果然没错,认识一个类型还是得从它的初始化开始啊。vector是std命名空间 中的一员,头文件是<vector>。
# include <vector>
这里出现了T类型,这是啥玩意儿呢?这就是模板参数,现在你只用知道:只要是能够定义一个变量的类型,都可以用来替换T。比如:
vector
也就是说,vector是可以嵌套的。机智的小锅锅小姐姐们有没有发现什么神奇的东西呢?没错,就是下边这个图:
如果使用一层vector你可以表示一维空间的话,那么使用嵌套vector就可以用来表示超过一维的空间!而且,这个空间还可以是非规则的,因为你可以任意改变每一层的vector的容量。
小帅翔提示
下边这两个初始化需要留意,因为他们含义不同。具体为什么后续再说明。
vector
操作
下边介绍一些超级常用的方法,学会这些方法,你就可以横着使用vector了哈哈哈哈~
首先我们声明一个vector变量v,则有:
v
如果v不含任何元素,则返回true,否则返回false
v
返回v中元素个数
v
在v尾端添加一个元素t
v
n是整型数据,和数组类似的用法,表示取出v中索引为n的元素
v1
v1,v2相等,当且仅当他们的元素类型相同,元素个数相等,而且对应位置处的元素值相等
v
在指定的it位置插入一个元素val,it是一个迭代器
v
删除指定it位置的一个元素,it是一个迭代器
v
清空v中的所有元素
注意
不允许在循环体内做可能改变vector大小的操作。切记!
迭代器初步
上边有两个方法使用到了迭代器,那什么是迭代器呢?迭代器其实是一种设计模式,具体是什么现在还不用管那么多,鲁迅先生说过:曾经有一个很好的遍历容器的方法摆在我面前,但我没有珍惜,而是直接拿来使用了。哈哈哈哈哈。
小帅翔提示
迭代器的使用和指针类似,使用“->”访问被指向对象的成员,使用“*”解引用。
想要获取vector的迭代器,很简单:
vector
说明
- end()操作的设计是为了迭代方便
- 可以使用“++”来更改迭代器指向下一位置
- 迭代器也可以与整数进行加减运算,表示移动迭代器到一个新位置
//正向遍历vec中的元素,end()作为遍历结束标志
小结
- vector是增强版的数组,但不是所有使用数组的地方都应该使用vector;
- 迭代器的设计是面向接口编程的很好的产物,所以不要问为什么有指针了还需要迭代器;
- 第二章完结撒花,下期做一个小程序体验一波编程之美~划重点!!划重点!!!
- 听说一键三连会刺激小帅翔的多巴胺分泌哦~