Vector的使用介绍
vector使用
vector是一个封装了动态大小数组的顺序容器,可以把vector理解为可以存放任何类型的动态数组
构造函数:
vector():创建一个空vector
vector(int nSize):创建一个元素个数为nSize的vector
vector(int nSize,cong t& t):创建一个元素个数为nSize的vector,且值为t
vector(const vector&):将vector复制给当前vector
vector(begin,end):复制[begin,end)区间内另一个数组的元素给vector
常用函数:
-
增加元素
void push_back(elem):在容器最后添加一个数据
iterator insert(iterator it,elem):在容器的it位置添加elem(容器下标从0开始) -
删除元素
iterator erase(iterator it):删除容器中it位置的元素
iterator erase(first,last):删除容器中[first,last)元素
void pop_back():删除容器中最后一个元素
void clear():清空容器中所有元素 -
容器相关信息
bool empty():判断容器是否为空
int size():返回容器当前(实际)大小
int capacity():返回容器分配的大小 -
其他操作
void swap(vector &):与另一个vector交换数据
void assign(int n,elem):设置容器中第n个元素为x
resize():改变当前容器的大小(包括size和capacity) -
注意:
vector其实也可以理解成一个变长的数组,因此可以通过下标来访问对应的元素,但是不能通过下标来修改对应的元素,当然vector的访问也可以通过迭代器来进行访问
二维vector的定义的两种方式:
vector a[maxn]:第一维大小(即行)是固定的,推荐使用这种方法,不容易出错可以用这个方法来实现图的邻接表存储
vector<vector > a:二维数组的行和列都是不固定的,可以使用a.resize()来定义行,同时也可以使用构造函数来确定行和列
const int maxn=1000;
vector<int> a1[maxn]; //一个固定行数为maxn的vector,其中每一个vector都可以存vector,因此是二维的
vector<vector<int> > a2;
a2.resize(maxn); //固定了vector的行数为maxn
vector<vector<int> > a3(maxn,vector<int> (10,0)); //maxn行10列,且初始值都为0
常用用途
-
用于存储不确定大小的数据,可以节省空间,但是时间比数组消耗的多
-
二维vector可以用来实现图的邻接表存储,从而避免使用指针造成错误
OJ中的Vector使用
以下题目的链接均在Virtual Judge平台中,Virtual Judge是集成了多个OJ的一个平台,可以在上面做很多其他OJ的题目,读者也可以自行搜索相应OJ平台来提交代码
以下题目中HDU 1612和HDU 4858使用了二维vector
UVA 484 The Department of Redundancy Department
题解将在后续博客中介绍,敬请期待啦!!!