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
在一个元素删除之后,之前对该元素的迭代器很有可能失效,会导致非法访问
注意:在不同的编译器下,迭代器失效可能不会进行报错,所以需要格外注意
感谢支持,如果你发现文章中有任何不严谨或者需要补充的部分,欢迎在评论区指出