6.1 vector的常见用法详解
vector数组 称为长度根据需要而自动改变的数组。要使用vector,需要添加头文件#include
1.vector的定义
vector<typename> name;
其中typename可以是任何基本类型,例如int、double、char、结构体等,也可以是STL标准容器,例如vector、set、queue等
2.vector容器内元素的访问
(1). 通过下表访问
vector<typename> vi;
直接访问vi[index]即可(如vi[0]、vi[1]…),区间是[0, vi.size()-1]
(2). 通过迭代器访问
迭代器(interator)可以理解为一种类似指针的东西,其定义是:
vecotr<typename>::interator it;
这样it就得到了迭代器it, 并且可以通过*it来访问vector里的元素, 看一段实例代码:
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int main(){
vector<int> v;
for(int i = 0; i < 5; i++){
v.push_back(i);
}
for(int i = 0; i < 5; i++){
cout<<v[i]<<' ';
}
cout<<endl;
/*vector<int>::iterator it = v.begin();
for(int i = 0; i < 5; i++){
cout<<*(it + i)<<' ';
}*/
for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
cout<<(*it)<<' ';
}
return 0;
}
输出结果:
0 1 2 3 4
0 1 2 3 4
注:在常用的STL容器中,只有在vector和string中,才允许用v.begin()+3这种迭代器加上整数的写法
3.vector常用函数实例解析
(1). push_back(x) 就是在vector后面添加一个元素
(2). pop_back() 用以删除vector的尾元素
(3). size() 用来获得vector中元素的个数
(4). clear() 用来清空vector中的所有元素
(5). insert(it, x) 用来想vector的任意迭代器it出插入一个元素x
(6). erase() 两种用法:删除单个元素、删除一个区间内的所有元素
1. erase(it) 即删除迭代器为it处的元素
2. erase(first, last) 即删除[first, last)内的所有元素
4. vector的常见用途
(1). 储存数据
vector本身可以作为数组使用,而且在一些元素个数不确定的场合可以很好地节省空间
有些场合输出数据的个数是不确定的,为了方便地处理最后一个满足条件不输出额外的空格,可以先用vector记录所有需要输出的数据,然后一次性输出
(2). 用邻接表存储图
// 4、vector动态数组
#include <bits/stdc++.h>
#include <vector>
using namespace std;
struct node{
int x;
int y;
node(int x, int y){
this->x = x;
this->y = y;
}
};
int main(){
vector<int> s;
s.push_back(1);
s.push_back(2);
s.push_back(3); //在vector数组后面添加一个元素
cout<<s.size()<<endl; //获得vector中元素的个数
s.pop_back(); //删除vector的尾元素
for(int i = 0; i < s.size(); i++){
cout<<s[i]<<' ';
}
cout<<endl;
vector<int> ss[10];
for(int i = 0; i < 5; i++){
for(int j = 0; j < 5; j++){
ss[i].push_back(i*j);
}
}
for(int i = 0; i < 5; i++){
for(int j = 0; j < ss[i].size(); j++){
cout<<ss[i][j]<<' ';
}
cout<<endl;
}
vector<node> v[10];
for(int i = 0; i < 5; i++){
int a = i+1, b = i+2, c = i+3;
v[a].push_back(node(b, c));
}
for(int i = 0; i < 5+1; i++){
cout<<v[i].size()<<endl;
for(int j = 0; j < v[i].size(); j++){
cout<<v[i][j].x<<' '<<v[i][j].y<<endl;
}
}
return 0;
}
3
1 2
0 0 0 0 0
0 1 2 3 4
0 2 4 6 8
0 3 6 9 12
0 4 8 12 16
0
1
2 3
1
3 4
1
4 5
1
5 6
1
6 7