vector的简单使用
PAT里让大家输入N组信息的时候基本上都会告诉你N的取值范围,我们都习惯了创建一个最大范围的数组,然后再用for循环来完成。可是有的时候题目没有告诉你N的范围,我们就不知道刚开始要创建多大的数组了,创建小了不够,创建太大又可能超内存。因此我们希望能创建一个动态的数组,可以自动调整自己的大小。我们当然可以用底层的函数realloc自己写一个出来,但是其实系统已经提供了一种现成的叫vector的模版
vector可以翻译成矢量,他支持很多实用的算法比如排序
使用vector前要#include“vector”
vector要怎么用呢?举个栗子
我们如果想创建一个int型的vector,然后把几个数字加进去,然后输出vector里的数字。
#include
#include
#include
using namespace std;
int main()
{
vector v;
int a = 1, b = 2, c = 3;
v.push_back(a);//此时vector的大小为1
v.push_back(b);//此时vector的大小为2
v.push_back(c);//此时vector的大小为3
cout << v[0] <<" "<< v[1]<<" " << v[2];
}
可以看到vector的使用方法和数组是一样的,v[0]就代表v矢量的第0个元素。
我们还可以在初始化的时候一次加入多个元素
#include
#include
#include
using namespace std;
int main()
{
int a[5] = { 1,2,3,4,5 };
vector v(a,a+5);//或者vector v(&a[0],&a[4]+1);
int i;
cout << v[4];
}
注意啦!如果要想把a[0]到a[4]都加入到vector里,那么初始化的时候就要写成v(&a[0],&a[4]+1)而不是v(&a[0],&a[4]),没错结尾就是要多加1。
还可以用pop_back函数删除vector最后一个元素
#include
#include
#include
using namespace std;
int main()
{
int a[5] = { 1,2,3,4,5 };
vector v(a,a+5);
int i;
for (i = 0; i < v.size();i++)
cout << v[i]<<" ";
cout << endl;
v.pop_back();//把最后面的5删掉
for (i = 0; i < v.size(); i++)
cout << v[i] << " ";
}
vector不仅可以是int ,char这种基本类型,还可以是自定义的结构体;
比如vector
不过要注意,结构体不能直接用sort排序,你要在sort函数里第3个参数加上一个自己定义的比较函数。
vector还支持用sort函数排序哦,非常实用,以后不用自己手写冒泡快速之类的排序了。
int a[5]={1,2,3,4,5}
vector
sort(v,v+5)//或者参数用迭代器,sort(v.begin(),v.end())
sort和我之前讲过的一样,第二个参数要多加1。
最后列出vector类其他的一些函数操作
c.clear() 移除容器中所有数据。
c.empty() 判断容器是否为空。
c.erase(pos) 删除pos位置的数据
c.erase(beg,end) 删除[beg,end)区间的数据
c.front() 传回第一个数据。
c.insert(pos,elem) 在pos位置插入一个elem拷贝
c.pop_back() 删除最后一个数据。
c.push_back(elem) 在尾部加入一个数据。
c.resize(num) 重新设置该容器的大小
c.size() 回容器中实际数据的个数。
c.begin() 返回指向容器第一个元素的迭代器
c.end() 返回指向容器最后一个元素的后一个的迭代器