STL - Vector基础
Vector 基础:
概述:
向量(Vector)是一个封装了动态大小数组的顺序容器。跟任意其他类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组
1、Vector的定义
像定义变量一样定义vector变量:
vector<类型名> 变量名;
类型名可以是int、double、char、struct,也可以是STL容器:vector、set、queue。vector<int> name; vector<double> name; vector<char> name; vector<struct node> name; vector<vector<int> > name;//注意:> >之间要加空格注意:vector<vector
> name; >>之间要加空格。
vector数组就是一个一维数组,如果定义成vector数组的数组,那就是二维数组。
vector<int> array[SZIE]; //二维变长数组
2、Vector容器内元素的访问
- 1、通过下标访问
#include <iostream> #include <vector> using namespace std; int main(){ vector<int> vi; vi.push_back(1); cout<<vi[0]<<endl; return 0; }
- 2、通过迭代器访问
迭代器(iterator)可以理解为指针:vector<类型名>::iterator 变量名; //例如: vector<int>::iterator it; vector<double>::iterator it; //例子: #include <iostream> #include <vector> using namespace std; int main(){ vector<int> v; for (int i = 0; i < 5; i++) { v.push_back(i); } //v.begin()返回v的首元素地址 vector<int>::iterator it=v.begin(); for (int i = 0; i < v.size(); i++) { cout<<it[i]<<" "; } return 0; }for循环迭代部分也可以写成:
vector<int>::iterator it=v.begin(); for (int i = 0; i < v.size(); i++) { cout<<*(it+i)<<" "; }与此同时,迭代器与for循环还有一种优雅的写法。
#include <vector> using namespace std; int main(){ vector<int> v; for (int i = 0; i < 5; i++) { v.push_back(i); } //vector的迭代器不支持it<v.end()的写法,因此循环条件只能it!=v.end() for (vector<int>::iterator it=v.begin(); it!=v.end();it++) { cout<<*it<<" "; } return 0; }
3.vector常用函数实例解析
1、push_back()
void std::vector<int>::push_back(const int &__x)
见名知意,push_back(item)就是在vector后面添加一个元素item。#include <iostream> #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 < v.size(); i++) { cout<<v[i]<<" "; } return 0; }2、pop_back()
void std::vector<int>::pop_back()
push和pop时一对反义词,学过数据结构的人都知道,栈元素的压入和弹出就是push和pop。须知,pop_back()一次弹出一个元素,vector容器就会减少一个预算。之所以叫容器,就是能往里面装一个一个的元素。#include <iostream> #include <vector> using namespace std; int main(){ vector<int> v; for (int i = 0; i < 5; i++) { v.push_back(i); } cout<<"pop_back前:"<<endl; for (int i = 0; i < v.size(); i++) { cout<<v[i]<<" "; } cout<<endl; v.pop_back(); cout<<"pop_back后:"<<endl; for (int i = 0; i < v.size(); i++) { cout<<v[i]<<" "; } return 0; }3、size()
std::size_t std::vector<int>::size()
szie()返回vector中所含元素的个数,时间复杂度为O(1)。#include <iostream> #include <vector> using namespace std; int main(){ vector<int> v; for (int i = 0; i < 5; i++) { v.push_back(i); } cout<<v.size()<<endl; return 0; }4、clear()
void std::vector<int>::clear()
clear()用于一键清空vector中的所有元素,时间复杂度为O(N),其中N为vector中原属和元素的个数。#include <iostream> #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 < v.size(); i++) { cout<<v[i]<<" "; } v.clear(); cout<<endl; cout<<"size = "<<v.size()<<endl; return 0; }5、insert()
insert(__position,__x); insert(要插入的地址,要插入的元素); 参数: __position:– A const_iterator into the %vector. __x:– Data to be inserted.与push_back()无脑在尾部添加元素不同的是,insert()是根据指定位置在vector中插入元素。
#include <iostream> #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 < v.size(); i++) { cout<<v[i]<<" "; } v.insert(v.begin()+2,-1); //将-1插入v[2]的位置 cout<<endl; for (int i = 0; i < v.size(); i++) { cout<<v[i]<<" "; } return 0; }6、erase()
erase(__position);
同样,与clear()简单粗暴清空vector不同的是erase(),删除指定位置的元素。
- 删除一个元素
erase(__position);- 删除一个区间内的元素
erase(__positionBegin,__positionEnd);
即是删除[ __positionBegin,__positionEnd )区间内的元素,注意:是左闭右开!

浙公网安备 33010602011771号