C++STL模板库之vector|青训营笔记

154 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第10天。

“工欲善其事,必先利其器。”使用C++编写算法时,使用前人封装好的一些数据结构,毫无疑问会提高我们的编程效率。因此,让我们大致来看看STL中的vector

不定长数组vector

vector是表示可变大小数组的序列容器。像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。在使用时需要引入头文件,#include<vector>

vector定义

直接声明

vector<int> a

声明大小

vector<int> a(n);
vector<int> b(n,2);

第一个参数为vector范围大小,第二个参数为初始值,在范围之类(0,n-1)为初始值,范围之外随机值

使用vector赋值

vector<int> c(b);
vector<int> d(b.begin(),b.begin()+3);

第一种用法,c的值和b相等。第二种用法,将b中指定元素(这里为前三个)值赋给新的vector。

使用数组赋值

int s[10]={1,2,3,4,5,6,7,8,9,10};
vector<int> e(s,s+10);

和上一种方法类似,把给定值赋值给新vector。

注意:将数组或者vector中的数据赋值到新vector中,如果原来有数据,前面的数据会被覆盖后面数据不变,但是数组长度会变成赋值了元素的个数。

vector增删改查操作

访问元素

vector[n] (0<=n<vector.size())
vector.front(); //返回第一个元素
vector.back();  //返回最后一个元素

添加元素

vector.push_back(n)

参数n为vector定义的元素类型值,向vector尾部添加元素,返回类型为void。

vector.insert(vector.begin()+1,n)

此方法第一个参数指定位置,第二个参数为插入的值。

vector.insert(vector.begin()+1,n,b)

此方法表示在指定位置插入n个b元素。

删除元素

vector.pop_back()

删除vector最后一个元素,同样返回类型为空。

vector.erase(vector.begin()+1,vector.begin()+4)

第一个参数为要删除元素左边界,第二个参数为右边界,使用左闭右开原则。

遍历元素

for(int i=0;i<vector1.size();i++){
	cout<<vector1[i]<<" ";
}

可以通过下标直接访问元素,也可以使用迭代器

for(vector<int>::iterator it=vector1.begin();it!=vector1.end();it++){
	cout<<*it<<" ";
}

vector常用方法

vector大小

vector.size()

判断是否为空

vector.empty()

交换

vector1.swap(vector2)

通过swap函数可以交换两个容器的数据空间,实现两个容器的交换。

排序

sort(vector.begin(),vector.end())

使用sort方法,需要引入头文件#include<algorithm>

翻转元素

reverse(vector.begin(),vector.end())

同样使用此方法需要引入头文件。

总结

由上可以看出,vector类似于数组,但比数组更为的灵活,可以动态的改变大小,且有很多方法。