这是我参与「第四届青训营 」笔记创作活动的第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类似于数组,但比数组更为的灵活,可以动态的改变大小,且有很多方法。