1、vector 翻译为向量,用“变长数组”更容易理解一些,此外vector还可以用来以邻接表的方式存储图,这对无法使用邻接矩阵的题目(节点数过多),有害怕使用邻接表的情况是十分友好的。
需要添加的头文件 #include<vector>
定义vector方式 ,这里的typename可以是任何基本类型:Int double char 结构或者是STL容器
vector <typename> name; // vector <int> a;
特别注意当typename是STL容器时,>>符号中间有一个空格:vector <vector<int> > name;
二维定义:vector<int> array [arraysize];//特别注意这里的arraysize是固定长度,而array数组的每一个都是一个vector容器;
vector容器元素的访问:1、通过下标访问 或者 2 、通过迭代器访问
1、通过下标访问
跟访问数组一样,下标从0-arraysize-1; //vi[0].
2、通过迭代器访问(这个跟以往的数组不同,需要特别记忆),迭代器是一个类似于指针的东西,指针就可以自加(++it,it++)
定义是:
vector <int> ::iterator it;//这里的it是一个vector <int> :: iterator 型的变量,得到it迭代器之后就可以通过*it来访问vector中的元素;
vector容器中数据的输入:
vector<int> vi; //声明vi vector容器
vi.push_back(i);//把i添加到vi的末尾处;
此外:vi.begin()为取vi的首元素地址,vi.end();取的vi尾元素的下一个地址(注意for循环时不能用it<vi.end()写法,要用it!=vi.end());//美国人的思想习惯一般是左闭右开,所以,vi.end()是到达尾元素的下一个地址
在常用的STL容器中,只有vector和string,才允许使用vi.begin()+2;这种迭代器加上整数的操作;
常用函数介绍:
1)push_back(x); 在vector的后面增加元素x, 如: vi.push_back(1);
2)pop_back(); 用于删除vector的尾元素; 如: vi.pop_back();
3)size(); 用于获取vector内部元素的多少; 如: vi.size();
4)clear(); 用来清空vevtor中的所有元素;如:vi.clear();
5)insert(it,x); 用来向vector的任意迭代器it处插入一个元素x;如:vi.insert(vi.begin+2,x);
6)erase(); 两种用法:1 删除单个元素 2删除一个区间的所有元素
1删除单个元素: vi.erase(vi.begin+3);
2删除一个区间的元素:vi.erase(vi.begin+1,vi.begin+4);///删除vi[1] vi [2] vi[3] 还是同理左闭右开