STL是一个很棒的东西,下面讲一讲STL容器vector的一般用法。
介绍
vector是一种动态数组,是基本数组的类模板。其内部定义了很多基本操作。 ——摘自度娘
vector之所以被称为动态数组,是因为它既可以采用下标对vector的元素进行访问,和数组一样高效。还可以对它的大小进行动态改变,并且它的大小会被容器自动处理。
定义
使用vector的标准模板,就需要在添加vector的头文件,即#include<vector>
。
定义如下:
vector<type> name
type是指定义的向量元素类型,name是定义向量的名字。
初始化
vector<int> f(5); // 定义有5个整形的向量f
vector<long long> a(4,0x7fffff);//定义有4个长整形的向量a,并且每个元素值都为0xfffff
int b[4]={1,2,3,4};
vector<int>a(b,b+4);//将b[0]至b[3]存到vector<int> a中,即a[0]至a[3]
元素访问
- 可以像数组一样通过元素下标进行访问,下标从 0 0 0到 s i z e ( ) − 1 size()-1 size()−1。
vector<int>a(10,5);
for(int i=0;i<a.size();i++)
printf("%d ",a[i]);
- 可以通过迭代器访问,类似于指针。
vector<int>a(10,5);
vector<int>::iterator it;
for(it=a.begin(); it!=a.end();it++)
printf("%d ",*it);
元素操作
常用的有:
vector<int> a,b;
a.empty()//判断a是否为空,空返回1,否则返回0
a.size()//返回向量元素个数
a.push_back()//向尾部添加新元素
a.pop_back()//删除尾部的元素
a.clear()//清空a中元素
a.back()//返回a中的最后一个元素
a.front()//返回a中的第一个元素
a.max_size()//返回容器a中最大数据的数量
a.swap(b)//将a和b元素互换
a.insert(a.begin()+2,5)//在a的第3个元素的位置插入一个元素5
a.insert(a.begin()+2,5,1)//在a的第3个元素的位置插入5个元素都是1
a.erase(a.begin()+1,a.begin()+3)//删除a.begin()+1到a.begin()+3的元素(不包括a.begin()+3)
算法
常用的有:
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> a;
bool cmp(const int &a,const int &b)
{
return a>b;
}
int main()
{
sort(a.begin(),a.end());//把a.begin()到a.end()的元素进行从小到大排序(不包括a.end()元素)
find(a.begin(),a.end(),5);//把a.begin()到a.end()的元素中查找5的元素返回它的位置
reverse(a.begin(),a.end());//将元素翻转(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含.)
sort(a.begin(),a.end(),cmp);//自定义排序
return 0;
}
总结
vector在某些方面要比数组效率更高,要根据实际情况合理选择。