vector介绍(南昌理工ACM)
vector容器是一个动态数组的结构,在内存中有一个指针指向一块连续的内存。类似数组结构一样。它的特点支持随机访问数据,因为其在内存中的单元是连续。它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,适用于对象简单,变化较小,并且频繁随机访问的场景,使用它时需要包含头文件
#include <vector>
一、vector的初始化
(1) vector<int> a;// 定义了一个长度可变的int型数组。
(2) vector<int> a(x);
//定义了x个整型元素的向量,但没有给出初值,其值是不确定的。
(3) vector<int> a(n,x);
//定义了n个整型元素的向量,且给出每个元素的初值为x。
(4) vector<int> a[x];//定义了一个一维长x,二维可变的int型数组。
(5) vector<int> a(b); //用b向量来创建a向量,整体复制性赋值
(6) vector<int> a(b.begin(),b.begin+x);
//定义了a值为b中第0个到第(x-1)个(共x个)元素
(7) int b[7]={1,2,3,4,5,9,8}; vector<int> a(b,b+7);
//从数组中获得初值
二、 vector对象的几个重要操作
(1)a.back();
//返回a的最后一个元素
(2)a.front();
//返回a的第一个元素
(3)a.clear();
//清空a中的元素
(4)a.empty();
//判断a是否为空,空则返回ture,不空则返回false
(5)a.pop_back();
//删除a向量的最后一个元素
(6)a.erase();
//删除指针所指的数据项
(7)a.push_back(x);
//在a的最后一个向量后插入一个元素x
(8)a.insert(a.begin()+n,x);
//在a的第n个元素(从第0个算起)的位置插入数值x
(9)a.size();
//返回a中元素的个数;
(10)a.swap(b);
//b为向量,将a中的元素和b中的元素进行整体性交换
(11) a.max_size();
//返回vector所能储存的最大的元素数目
(12)a.rbegin()
//将vector反转后的开始指针返回(其实就是原来的end-1)
(13)a.rend()
//将vector反转构的结束指针返回(其实就是原来的begin-1)
三、 遍历vector的几种方式
(1)添加元素
1、 简单
vector<int> a;
for(int i=0;i<10;i++)
a.push_back(i);
2、从其他数组中选择元素向向量中添加
int a[6]={1,2,3,4,5,6};
vector<int> b;
for(int i=1;i<=4;i++)
b.push_back(a[i]);
3、从现有向量中选择元素向向量中添加
int a[6]={1,2,3,4,5,6};
vector<int> b;
vector<int> c(a,a+4);
for(vector<int>::iterator it=c.begin();it<c.end();it++)
//for(auto it=c.begin();it<c.end();it++)
b.push_back(*it);
(2) 读取元素
1、通过下标方式读取
int a[6]={1,2,3,4,5,6};
vector<int> b(a,a+4);
for(int i=0;i<=b.size()-1;i++)
cout<<b[i]<<" ";
2、通过遍历器方式读取
int a[6]={1,2,3,4,5,6};
vector<int> b(a,a+4);
for(vector<int>::iterator it=b.begin();it!=b.end();it++)
//for(auto it=b.begin();it<b.end();it++)
cout<<*it<<" ";
PS:在vector当中包含三个迭代器成员变量
iterator start // 表示目前使用空间的头
iterator finish // 表示目前使用空间的尾
iterator end_of_storage // 表示目前可用空间的尾
四、几种重要的算法
使用时需要头文件
#include <algorithm>
(1)sort(a.begin(),a.end());
//将a中的全部元素进行从小到大排列
(2)reverse(a.begin(),a.end());
//对a中的全部元素倒置
(3)copy(a.begin(),a.end(),b.begin()+1);
//把a中的从a.begin()到a.end()的元素复制到b中,
//从b.begin()+1的位置开始复制,覆盖掉原有元素
(4)find(a.begin(),a.end(),x);
//在a中的全部元素中查找数值x,若存在返回其在向量中的位置