前面我们已经向大家介绍过了C++STL库,今天我就来向大家介绍一下其中vector的使用方法,一起来看看吧。
vector底层其实是用一个顺序表来实现的,只不过为了支持泛型编程所以被弄成了模板,这样使用就会更加的便利。
在我所用的C++文档中给出了四种的使用方法,这里我们会一一介绍
直接创建vector对象,与构造函数的形式一样
vector v1;//创建一个int类型的顺序表v1
vector v2;//创建一个char类型的顺序表v2
vector v3;//创建一个double类型的顺序表v3
创建一个对象,创建完后其中会有n个val元素
这里的size_type 其实可以理解为我们经常使用的size_t,value_type就是我们所创建顺序表其中所包含的元素的类型。
vector v1(5,1);//创建一个int类型的顺序表v1,其中有5个1
vector v2(5,'a');//创建一个char类型的顺序表v2,其中有5个'a'
vector v3(2,2.2);//创建一个double类型的顺序表v3,其中有2个2.2
利用迭代器区间的形式创建对象
template < class InputIterator >是定义出来的一个模板,其中 InputIterator则为模板参数,他的底层其实就是一个指针,在C++中我们也经常将其称为迭代器
vector v1(10, 5);//创建一个int类型的顺序表v1,其中有10个5
vector v2(v1.begin(), v1.end());//按照v1的头至v1的尾元素创建v2,其中有10个5
vector v3(v1.begin(), v1.begin() + 5);//按照v1的[0,5]区间创建v3,其中有5个5
通过已经存在的vector对象创建一个新对象(拷贝构造函数)
vector v1(5, 1);//创建一个int类型的顺序表v1,其中有5个1
vector v2(v1); //利用v1创建一个与v1内容一样的v2
迭代器的主要作用就是让算法能够不关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装。
vector的迭代器就是原生态指针T*。(以下的所说的位置指的都是地址)
1.普通迭代器接口:begin() + end(),其中begin()作用为获取首元素的位置,end()的作用为获取末尾元素的下一个位置
2.反向迭代器接口:rebegin() + rend(),其中rebegin()的作用为获取末尾元素的下一个位置,rend()的作用为获取首元素的位置
这两组迭代器恰好相反。
在关于空间操作的这方面,C++提供了五个函数
获取数据个数
vector v1(10, 1);
v1.size();//获取元素的个数为10
改变vectoe的size 获取vector的容量 判断vector是否为空 改变vector的capacity 尾插,直接在容器的最后面插入数据 尾删,直接删除容器的最后一个元素 template 1.iterator insert (iterator position, const value_type& val); 1.iterator erase (iterator position); reference operator[] (size_type n); 到这里我们对于vector的一些最常用的函数如何使用就已经讲述完毕了,大家下去可以自己尝试写一下代码,可以加深自己对这些函数的理解,使用次数多了也就可以记住了,另外其实vector的函数操作还有很多,大家可以根据自己的需求去C++官方STL网站中查询使用方法。
如果n>size(),就会将vector的size扩大到n,扩大后新插入的元素为val
如果n vector3.capacity()
注意:这里的容量与size()所指的并不相同,capacity获取的为当前vector最大能容纳的元素个数(数据满后可扩容),size()获取的为当前vector中已有的元素个数 vector4.empty()
vector5.void reserve (size_type n);
vector四、vector增删查改
1.void push_back (const value_type& val);
vector2.void pop_back();
vector3.find
InputIterator find (InputIterator first, InputIterator last, const T& val);
这里的InputIterator就是我们前面所说的迭代器
查找,但是需要注意的是:这个是算法模块实现的,不是vector的成员接口,所以在使用的时候需要包algorithm头文件 vector4.insert
2.void insert (iterator position, size_type n, const value_type& val);
3.template
void insert (iterator position, InputIterator first, InputIterator last);
上面有三种用法:
1.在position位置直接插入一个元素,position是一个迭代器
2.在position位置直接插入n个元素,position是一个迭代器
3.在position位置插入一段区间(区间用迭代器表示),position是一个迭代器 vector5.erase
2.iterator erase (iterator first, iterator last);
以上有两种用法:
1.删除position位置的元素
2.删除first~last区间的所有元素 vector6.operator[]
这里的reference其实指的就是传引用返回,所以我们返回的数据支持修改,n指的就是元素的下标(与数组下标相同)
有了这个运算符重载,就可以让我们以访问数组的形式去访问vector内的数据 vector总结
我个人使用的网站是这个https://cplusplus.com/,另外在下一节中我们会模拟实现vector,好奇的盆友可以来看看呀。
今天的内容到这里就结束了,如果对你有帮助记得给波三连呦!!!