1、vector: 向量,也称为“变长数组”即长度根据需要自动改变的数组。
在使用时需要添加vector头文件与“using namespace std”,即#include<vector>
using namespace std
2、vector定义
vector<typename> name ; //typename为数据类型,name为变量名
vector<int> vi; //定义了一个以int为数据类型的向量(变长数组)vi,类似于定义 int v[n],vi无需设置长度及长度可变
vector<int> name;
vector<double> name;
vector<char> name;
vector<node> name; //node 为结构体类型
3、vector容器内元素的访问
(1)通过迭代器(iterator)访问
vector<typename>::iterator it;
这样it就是一个vector<typename>::iiterator 型的变量
vector<int> ::iterator it;
vector<double> : : iterator it;
这样就得到了迭代器it,并且可以通过*it来访问vector里的元素
具体程序如下:
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector <int> vi;
for(int i=1;i<=5;i++)
{
vi.push_back(i);
}
for(vector <int>::iterator it=vi.begin();it!=vi.end();it++)
{
printf("%d ",*it);
}
return 0;
}
4、末尾添加元素与末尾删除元素
(1)pushu_back( ) : pushu_back( x ) 就是在vector 后面添加一个元素x,时间复杂度为O(1)。
(2) pop_back( ): pop_back( ) 用以删除vector的尾部元素,时间复杂度为O(1)。
#include<stdio.h>
#include<vector>
using namespace std;
int main()
{
vector<int> vi;
for(int i=1;i<=5;i++)
{
vi.push_back(i);
}
for(vector<int>::iterator it=vi.begin();it!=vi.end();it++)
{
printf("%d ",*it);
}
vi.pop_back();//删除末尾元素5
for(vector<int>::iterator it=vi.begin();it!=vi.end();it++)
{
printf("%d ",*it);
}
return 0;
}
5、获取vector对象的元素个数
size()用来获取vector中元素的个数,时间复杂度为O(1)。size()返回的是unsigned类型,不过一般不会来说用%d不会出现很大的问题。
6、清空vector中的所有元素
clear()用来清空vector中的所有元素,时间复杂度为O(N),其中N为vector中元素的个数。
示例如下:
#include<stdio.h>
#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());
vi.clear();
printf("%d \n",vi.size());
return 0;
}
7、vector的元素插入
insert(it,x)用来向vector的任意迭代器it出插入一个元素x,时间复杂度O(N)。这里需要注意编写程序时序列编号从0开始,而插入位置时,序号从1开始。
示例如下:
#include<stdio.h>
#include<vector>
using namespace std;
int main()
{
vector<int> vi;
for(int i=1; i<=5 ;i++)
{
vi.push_back(i);
}
vi.insert(vi.begin()+2,-1); //在vi的第三个位置上插入-1
for(vector<int>::iterator it=vi.begin();it!=vi.end();it++)
{
printf("%d ",*it); //1,2,-1,3,4,5
}
//另一种遍历方法
//for(int i=0 ; i<vi.size() ; i++)
//{
// printf("%d ",vi[i]);
//}
return 0;
}
8、删除元素:erase()
erase()有两种用法:删除单个元素、删除一个区间内的所有元素。
(1)删除单个元素
erase(it)即删除迭代器为it处的元素
示例如下:
#include<stdio.h>
#include<vector>
using namespace std;
int main()
{
vector<int> vi;
for(int i=5;i<=9;i++)
{
vi.push_back(i); //插入5,6,7,8,9
}
//删除8
vi.erase(vi.begin()+3);
for(vector<int>::iterator it=vi.begin(); it!=vi.end();it++)
{
printf("%d ",*it);
}
return 0;
}
(2)删除一个区间内的所有元素
erase(first,last)即删除[first,last)内的所有元素,左闭右开。
示例如下:
#include<stdio.h>
#include<vector>
using namespace std;
int main()
{
vector<int> vi;
for(int i=5;i<=9;i++)
{
vi.push_back(i); //插入5,6,7,8,9
}
//删除8
vi.erase(vi.begin()+1,vi.begin()+4); //删除6,7,8,
for(vector<int>::iterator it=vi.begin(); it!=vi.end();it++)
{
printf("%d ",*it);
}
return 0;
}
参考书籍:《算法笔记》 胡凡 曾磊 p191-197