vector
一、vector的介绍
1、vector的本质
vector是一个可以变长的类似数组的一个容器,而且可以像数组一样利用下标的方式访问数据,具有数组高效的地方;但是有的时候在插入数据的时候会因为扩容的问题,浪费掉很多的空间,而且在不是对数据进行的不是尾部处理的时候,时间复杂度也是相当的高,但是在面对尾部数据处理的时候在时间复杂度上就有很高的效率,并且扩容还会把全部的数据进行搬运,搬运(把数据移动到一个新的数组里面)就会浪费很多的时间。
二、vector的常用API
1、vector的迭代器
在vector的迭代器中就是,对应数组起始的下标位置和数组最后一个数据的下一个下标位置,其中begin()返回起始位置,end()返回最后的位置;rbegin(),放回的就是reverse_iteraotr它是最后一个数据的下一个下标位置,rend(),就是第一个位置的下标,和正向的迭代器反过来。
**!!!注意:*在vector的迭代器中,迭代器是会失效的,特别是在插入和删除的位置的时候会引发迭代器失效的问题,迭代器失效就是说迭代器原本指着的位置已经被改变了,vector的迭代器就是原生态指针T 。因此迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失效的迭代器,程序可能会崩溃)。解决迭代器失效就需要重新更新迭代器
2、vector的增删查改API
push_back()
:就是在数据段的末尾插入数据
pop_back()
:就是删除数据段末尾的数据
erase()
😦)给需要删除位置的迭代器,使用erase一般需要配合find()函数一起使用。
需要注意的是使用erase删除的时候需要查看删除的是否是最后一个元素,要是是最后一个元素会导致迭代器失效。
operator[]
:就是可以像数组医用通过下标去访问或修改数据
insert()
:在指定的位置前插入数据
swap()
:可以交换两个vector的数据,但是需要更新迭代器
三、管理vector空间的API
1、不改变vector的size和capacity的API
size()
:计算vector有效数据的个数
capacity()
:计算vector的容量
empty()
:查看vector是否为空
2、改变vector的size和capacity的API
resize()
:会改变size
reserve()
:会改变capacity,就是vector的扩容机制