PAT小技巧之vector的简单使用

来源:互联网 发布:mac 终端显示完整路径 编辑:程序博客网 时间:2024/05/17 01:09

vector的简单使用


PAT里让大家输入N组信息的时候基本上都会告诉你N的取值范围,我们都习惯了创建一个最大范围的数组,然后再用for循环来完成。可是有的时候题目没有告诉你N的范围,我们就不知道刚开始要创建多大的数组了,创建小了不够,创建太大又可能超内存。因此我们希望能创建一个动态的数组,可以自动调整自己的大小。我们当然可以用底层的函数realloc自己写一个出来,但是其实系统已经提供了一种现成的叫vector的模版


vector可以翻译成矢量,他支持很多实用的算法比如排序

使用vector前要#include“vector”

vector要怎么用呢?举个栗子

我们如果想创建一个int型的vector,然后把几个数字加进去,然后输出vector里的数字。

#include<iostream>#include<string>#include<vector>using namespace std;int main(){vector<int>  v;int a = 1, b = 2, c = 3;v.push_back(a);//此时vector的大小为1v.push_back(b);//此时vector的大小为2v.push_back(c);//此时vector的大小为3cout << v[0] <<" "<< v[1]<<" " << v[2];}

可以看到vector的使用方法和数组是一样的,v[0]就代表v矢量的第0个元素。



我们还可以在初始化的时候一次加入多个元素

#include<iostream>#include<string>#include<vector>using namespace std;int main(){int a[5] = { 1,2,3,4,5 };vector<int> v(a,a+5);//或者vector<int> 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<iostream>#include<string>#include<vector>using namespace std;int main(){int a[5] = { 1,2,3,4,5 };vector<int> 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<mystruct>  v;

不过要注意,结构体不能直接用sort排序,你要在sort函数里第3个参数加上一个自己定义的比较函数。


vector还支持用sort函数排序哦,非常实用,以后不用自己手写冒泡快速之类的排序了。

int a[5]={1,2,3,4,5}

vector<int> v(a,a+5);

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()             返回指向容器最后一个元素的后一个的迭代器







原创粉丝点击