C++STL之VECTOR用法及实战(pat测试)
序
最近作者在刷pat,俗话说,学到能教人的程度才算完全掌握,教人等于输出,教的不对肯定是自己掌握不牢固,也就是内在算法不对。写这篇博客的目的一方面在于复习自己所学过的知识,整理下方便以后再次学习,作者水平很菜,欢迎大佬们纠正。
vector是什么?什么时候用?
- vector翻译为向量, 但是在编程中我觉得变长数组更加贴切,也就是长度根据需要自动变化的数组。
- 在考试过程中,有时会碰到用普通数组超内存的情况,就需要vector
- 用邻接表的形式存储图(未完待续)
vector的定义
1.单独定义一个vector
数据类型 typename, vector名称 name;
vector<typename> name; //长度可变的一维动态数组
当然作为一个容器(什么是容器,就像碗里面放水一样,vector是碗,typename是水,当然也可以放米饭什么的),数据类型就可以放int、double、char、结构体等等,甚至你可以放他本身——大碗里放了个小碗。。。
vector<vector<int> > name; //“>” “>”之间要加空格,为了和iostream中的>>流做区分
这就成了一个两个维度都没定义的二维动态数组。灵魂画图,不喜见谅==。
vector<int> name[100];
很多小伙伴看到过这种写法,这种写法意思是其中一维用定义好长度为100的vector数组,另一维为长度动态变化的vector数组,vector中存int类型的数据。
vector内元素的访问
- 下标访问
与一般数组访问一样,对一个定义为vector vi的vector容器来说,访问vi[index]即可,index为0 ~ vi.size() - 1。
二维访问,对于一个定义为vector name[100]的容器来说,访问vi[x][y]即可,x为长度确定的数组下标,y为长度可变的vector的下标。 - 迭代器访问
迭代器可以理解为一种类似指针的东西,其定义:
vector<typename>::iterator it;
其中it就是迭代器的变量名,我们可以通过*it来访问vector内的元素,e.g.
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
vector<int> vi;
for(int i = 1; i <= 5; i++)
{
vi