目录
1.1 vector的常见用法详解
前言:
vector翻译为向量,不过我们一般将其称作变长数组。
若要使用vector,需要添加vector头文件#include<vector>以及一句“using namespace std;”
1.vector的定义:
vector<类型> 变量名;
即vector<typename> name;
typename可以是任意类型(诸如int double char node),也可以是STL标准容器(诸如vector,set,queue)。
需要注意的是,如果typename也是一个STL容器,定义的时候要记得在>>符号之间,加上空格!
example:
vector<vector<int> > name; //之间要加空格!
一个普通的vector类似与一维可变长数组,但此处,typename类型为vector的则可以看成二维可变长数组。
定义vector数组的方式(这个与二维可变长数组有所不同)
example:
vector<typename> Arryname[arraySize];
vector<int> vi[100];
这个只有一个维度可以边长,另一个维度并不能改变长度!
2.vector内的元素访问:
(1)通过下标访问:
example:
vector<typename> vi;
vi[index] like vi[0] or vi[1]
(2)通过迭代器访问:
迭代器(iterator)可以理解为一种类似指针的东西,定义是:
vector<typename>::iterator it;
vector<typename>::iterator it = vi.begin();
可以理解为*(it + 0) = vi[0];
也就是说vi[i]与*(vi.bein()+i)等价
在STL中,只有vector和string中,才允许使用vi,begin()+3这种迭代器加整数的写法!
3.vector常用函数解析:
(1)push_back()(vi.push_back(i))
在vector后面加一个数,时间复杂度是O(1)
(2)pop_back()
有加入就有删除,pop_back()表示删除vector的尾元素,时间复杂度是O(1)。
(3)size()
size()用来获取vector中的元素个数,时间复杂度为O(1)。size()返回的是unsigned的类型,不过一般来说用%d不会出很大的问题,这一点对STL容器都是一样的!
(4)clear()
clear()用来清空vector中的所有元素,时间复杂度为O(N),其中N为vector中元素的个数。
(5)insert()
insert(it,x)用来在vector中任意迭代器it处插入一个元素,时间复杂度是O(N)。
(6)erase()
erase()有两种用法,一种是单个删除,另一种是区间删除。
example:
erase(it)即删除it处的数。
erase(A,B)即删除[A,B)范围内数!
(1)储存数据
vector本身可以用作数组,而且在一些元素个数不确定的场合可以很好的节省空间。
有些场合需要根据一些条件把部分数据输出在同一行,数据中间用空格隔开。由于输出的数据个数不确定,为了更方便地处理最后一个满足条件的数据后面不输出额外的空间,可以先用vector记录所有需要的数据,然后一次性输出!
(2)用邻接链表存储图
来个云朵放松一下~~