vector
翻译为向量,可以称之为“变长数组”,在使用时需加上 vector 头文件,即 #include <vector>
,并在头文件下加上 “using namespace std;
”。
1. vector 的定义
vector<typename> name ;
即:vector 数据类型 名称
相当于一维变长数组,其中:
typename 可以是任何基本类型,例如 int, char, double, 结构体, STL 容器。
例如:
vector<int> vi ;
vector<vector<int> > vi ; //注意若放入STL容器,要在> >中间加空格
vector<typename> Arrayname[arraySize] ;
即:vector 数据类型 多个vector (从Arrayname[0]~Arrayname[arraySize-1]) [vector个数]
例如:
vector<int> vi[100] ;
2.vector 容器内元素的访问
(1) 通过下标访问
vector<int> vi ;
直接访问 vi[index]
, index
从 0
到 vi.size()-1
(2) 通过迭代器访问
vector<typename>::iterator it ;
//通过 *it 访问vector里的元素
例如:
#include <cstdio>
#include <vector>
using namespace std ;
int main () {
vector<int> vi ;
for (int i = 1; i <= 5; i++) {
vi.push_back (i) ;
}
//vi.begin () 为取vi的首元素地址,而it指向这个地址
vector<int>::iterator it = vi.begin () ;
for (int i = 0; i < 5; i++) {
printf ("%d ", *(it+i)) ;
}
return 0 ;
}
//可以看出:vi[i]和(vi.begin()+i)是等价的
//利用it++访问
#include <cstdio>
#include <vector>
using namespace std ;
int main () {
vector<int> vi ;
for (int i = 1; i <= 5; i++) {
vi.push_back (i) ;
}
//vector的迭代器不支持it<vi.end()的写法, 因此循环条件只能使用it!=vi.end()
for (vector<int>::iterator it = vi.begin(); it != vi.end(); it++) {
printf ("%d ", *it) ;
}
return 0 ;
}
3. vector 常用函数实例解析
(1). push_back()
//push_back():在 vector 后面添加一个元素 x
#include <cstdio>
#include <vector>
using namespace std ;
int main () {
vector<int> vi ;
for (int i = 1; i <= 3; i++) {
vi.push_back(i) ;
}
for (int i = 0; i < vi.size(); i++) { //通过下标访问
printf ("%d ", vi[i]) ;
}
return 0 ;
}
(2). pop_back()
//pop_back():删除 vector 尾的元素
#include <cstdio>
#include <vector>
using namespace std ;
int main () {
vector<int> vi ;
for (int i = 1; i <= 3; i++) {
vi.push_back(i) ;
}
vi.pop_back() ;
for (int i = 0; i < vi.size(); i++) {
printf ("%d ", vi[i]) ;
}
return 0 ;
}
(3). size()
//size():获得 vector 中元素个数
#include <cstdio>
#include <vector>
using namespace std ;
int main () {
vector<int> vi ;
for (int i = 1; i <= 3; i++) {
vi.push_back(i) ;
}
printf ("%d", vi.size()) ;
return 0 ;
}
(4). clear()
//clear():清空 vector 中的所有元素
#include <cstdio>
#include <vector>
using namespace std ;
int main () {
vector<int> vi ;
for (int i = 1; i <= 3; i++) {
vi.push_back(i) ;
}
vi.clear() ;
printf ("%d", vi.size()) ;
return 0 ;
}
(5). insert()
//insert(it, x):向 vector 中任意迭代器 it 处插入元素 x
#include <cstdio>
#include <vector>
using namespace std ;
int main () {
vector<int> vi ;
for (int i = 1; i <= 3; i++) {
vi.push_back(i) ;
}
vi.insert(vi.begin() + 2, -1) ; //插入元素到下标为2的位置
for (int i = 0; i < vi.size(); i++) {
printf ("%d ", vi[i]) ;
}
return 0 ;
}
(6). erase()
i) 删除单个元素
//删除下标为 i 的单个元素:vi[i]
#include <cstdio>
#include <vector>
using namespace std ;
int main () {
vector<int> vi ;
for (int i = 1; i <= 5; i++) {
vi.push_back(i) ;
}
vi.erase(vi.begin()+3) ;
for (int i = 0; i < vi.size(); i++) {
printf ("%d ", vi[i]) ;
}
return 0 ;
}
ii) 删除区间内元素
//删除区间 [a, b] 内元素:vi.erase(vi.begin()+a, vi.begin()+(b+1))
#include <cstdio>
#include <vector>
using namespace std ;
int main () {
vector<int> vi ;
for (int i = 1; i <= 9; i++) {
vi.push_back(i) ;
}
vi.erase(vi.begin()+1, vi.begin()+3) ; //删除区间[1, 2]的元素
for (int i = 0; i < vi.size(); i++) {
printf ("%d ", vi[i]) ;
}
return 0 ;
}