vector介绍
vector
vector是一个可变大小数组的序列容器,是一个类似于数组的顺序存储结构容器,因此可以采用下表对vector的元素进行访问,可以进行随机存储,而且其大小是可变的
vector的使用
| 构造函数 | 说明 |
|---|---|
| vector() | 无参构造 |
| vector(size_type n, const value_type& val = value_type()) | 构造并初始化n个val |
| vector(const vector& x) | 拷贝构造 |
| vector(InputIterator first, InputIterator last) | 迭代器构造,传入首尾迭代器 |
| iterator | 说明 |
|---|---|
| begin(),end() | 获取第一个元素位置的迭代器、最后一个元素下一个位置的迭代器 |
| rbegin(),rend() | 获取最后一个元素位置的迭代器、获取第一个元素前一个位置的迭代器 |
| 容量操作函数 | 说明 |
|---|---|
| size | 获取数据个数 |
| capacity | 获取容量大小 |
| empty | 判空 |
| resize | 改变size |
| reserve | 改变capacity |
- capacity的扩充在不同的版本下实现的倍数是不同的,例如vs下是按照1.5倍扩充的,g++是按照2倍扩充的
- resize在改变size同时会对其进行初始化
- reserve只改变capacity,不会进行初始化,因此size不会改变
| 增删查改 | 说明 |
|---|---|
| push_back() | 尾插 |
| pop_back() | 尾删 |
| find | 查找,由algorithm模块实现 |
| insert | 在pos之后插入val |
| erase | 删除pos的数据 |
| swap | 交换两个vector |
| operator[] | 支持下标访问 |
vector迭代器失效
迭代器的概念可以简单理解为指针,例如vector的迭代器其实就是原生指针,像其他更为复杂的容器其迭代器是对指针的封装
迭代器的销毁实际上类似于野指针的概念,意为其指向的空间已经销毁,若继续使用则程序可能会崩溃
可能造成迭代器失效的操作有:
空间的改变,例如resize、reserve、insert、assign、push_back
因为这些类似于插入操作对于空间都有可能造成扩容,一旦在操作之前声明了迭代器,操作之后迭代器就有可能失效
可以通过在操作之后重新进行赋值解决
删除操作 erase
在一个元素删除之后,之前对该元素的迭代器很有可能失效,会导致非法访问
注意:在不同的编译器下,迭代器失效可能不会进行报错,所以需要格外注意
==感谢支持,如果你发现文章中有任何不严谨或者需要补充的部分,欢迎在评论区指出==