您的位置:首页 > 汽车 > 新车 > C++中的容器——vector

C++中的容器——vector

2024/10/31 9:36:21 来源:https://blog.csdn.net/Mrlossry/article/details/142316729  浏览:    关键词:C++中的容器——vector

1. vector的介绍

vector:vector的底层实际上就是一个数组(也称为顺序表),数据是连续存储在数组中的,因此vector是可以使用下标来进行访问的,但是它的大小并不是像数组一样是固定的,而是可以动态调整的。

1.1 vector的成员变量
template<class T>
class vector
{
public:typedef T* iterator;
private:iterator _start=nullptr;iterator _end = nullptr;iterator _finish = nullptr;
}

成员变量是三个指针,分别指向数组中的第一个元素,指向数组的最后一个元素的后一个元素,指向数组中有效的最后元素的后一个元素。
vector的演示图

在这里插入图片描述

2. vector的使用

下面只是对常用的一个成员函数进行介绍,如需详细请自行访问vector的官方文档。

构造函数:
vector() //无参构造
vector (const vector& x) //拷贝构造
vector (InputIterator first, InputIterator last)//迭代器区间构造

iterator的使用
begin()//获取第一个数据位置的iterator/const_iterator
end()//获取最后一个数据的下一个位置的iterator/const_iterator
rbegin()//获取最后一个数据位置的reverse_iterator
rend//获取第一个数据前一个位置的reverse_iterator

容量空间
size()//获取数据个数
capacity()//获取容量大小
empty()//判断数据量是否为空
resize()//改变vector中size的大小
recapacity()//改变vector中的capacity,但是一般只有当需要改变的量大于vector中的capacity,capacity才会改变,小于vector中的capacity一般是不会改变的。

增删改查
push_back()//尾插
pop_back()//尾删
find()//查找
erase()//删除指定位置的元素,还可以删除一个区间中的所有元素
insert()//在指定位置之前插入元素
operator//向数组一样访问元素

注:上面函数的功能不全,只是列举了一些常用的功能,还有很多少用的功能,这篇文章并没有过多介绍

3. vector的迭代器失效

迭代器:迭代器其实是一种封装的思想,其目的是为了,在不同的容器中,可以使用迭代器进行统一的访问和操作
vector的迭代器:vector的迭代器的底层实际上就是一个指针,迭代器失效也就是当指针所指向的内容被释放或者已经被销毁,这样很容易造成程序的崩溃。

vector迭代器失效的原因

  1. 操作引起底层的空间改变。
#include <iostream>
using namespace std;
#include <vector>int main()
{vector<int> v{1,2,3,4,5,6};auto it = v.begin();recapacity(100);//在进行扩容时,realloc函数不能在原空间后面进行扩容,需要另外开辟空间,it原来所指向的空间内容被释放,这是it迭代器就失效了return 0;}
  1. 指定位置元素的删除操作(erase函数)。当erase函数对vector的元素进行删除时,传入的迭代器指向需要删除元素的位置,删除该元素,后面的元素占据该位置。这时该迭代器就变成指向后面元素,这种情况也认为是迭代器失效。(在vs中是直接运行崩溃,但是在Linux中是可以的,能不能用该迭代器进行数据访问还是要看具体的编译器)

4. 模拟实现vector容器

由于模拟的代码篇幅过长,请大家直接访问我的giteevector的模拟实现。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com