vector
一、概念
vector本质就是一个封装好的数组(也就是数组描述的线性表),使用vector可以方便快捷的实现对数组中元素进行某些操作。
二、vector的声明
1、一维数组的声明
a、vector<T> vec(n) 声明一个有n个元素的数组,数组中的元素为T类型
vector<char> vec(10);
b、vector<T> vec(n,a) 声明一个有n个元素的数组,数组中元素为T类型,而且将数组中所有元素 初始化为a。
vector<int> vec(10,1);
c、vector<T> vec(vec1) 声明一个大小和vec1一样的数组,并且将vec1中的所有元素赋值给vec,注意,T类型和vec1的类型要相同
vector<int> vec1(10,1);
vector<int> vec(vec1); //vec中所有元素均为1
d、vector<T> vec(vec1.begin()+m,vec1.begin()+n) 声明一个大小为n-m的数组,且将vec1中的[m,n)赋值给vec (m为0时可以省略)
vector<int> vec1(10,1);
vector<int> vec(vec1.begin(),vec1.begin()+4)
e、vector<T> vec(nums+m,nums+n) 和d的声明方法相同,只是把向量vec1换成数组nums
int nums={1,2,3,4,5,6,7,8,9,10}
vector<int> vec(nums,nums+4);
2、二维数组的声明(以声明m×n的数组为例)
a、vector<vector<T>> vec(m) 声明一个大小为m的数组vec,数组元素为vector<T> 类型。
这个需要一行行输入到一个向量中,再插入到vec中
vector<vector<int>> vec(m);
vector<int> vec1(n,1);//也可以自己用循环赋值
vec.push_back(vec1);//赋值完以后可以用clear()函数清空vec1.
b、vector<vector<T>> vec(m) 和a方法基本一致,只是a方法是一个一个赋值好的向量插入到vec中,而这个是先构建好vec的大小,再去赋值。
vector<vector<int>> vec(m);
for(int i=0;i<m;++i) vec[i].resize(n)
//或者
vector<vector<int> > vec(m,vector<int>(n));
三、vector迭代器的声明
声明一个迭代器 it
vector<T>::iterator it
四、常用函数
1、begin()返回vector容器第一个元素的地址
2、end()返回vector容器最后一个元素的下一个元素的地址
3、rbegin()返回一个逆序迭代器,它指向vector最后一个元素
4、rend()返回一个逆序迭代器,它指向vector的第一个元素的位置
5、push_back(a) 在尾部插入元素a
6、insert(vec.begin()+i,a)在vec第i个元素上插入a,从第i个元素及其后面的元素全部往后移。
7、insert(vec.begin()+i,n,a)在vec第i个元素后面插入n个a
8、insert(vec.begin()+i,arr+i1,arr+j1)arr为数组,在vec的第i个元素中插入arr的[i1,j1-1]的元素
9、erase(vec.begin()+i)删除vec第i+1个元素
10、erase(vec.begin()+i,vec.begin()+j)删除区间[i,j-1],从第0个元素开始算起
11、size() 返回vector大小
12、clear() 清空vector
13、pop_back() 删除最后一个元素
14、empty() 判断vector是否为空
15、a.assign(b.begin(),b.begin()+i)将b的前i+1个元素赋给a
16、a.assign(n,x) a含有n个元素,每个元素都为x
17、a.back() 返回a的最后一个元素
18、a.front() 返回a的第一个元素
19、vec.capacity() 返回vec在内存中总共可以容纳的元素个数
20、vec.resize(n) 将vec的元素个数调至n个,多则删,少则补,其值随机
21、vec.resize(n,m) 将vec的元素个数调至n个,多则删,少则补,其值为m
22、vec.reserve(n) 将vec的容量扩充至n
23、veca.swap(vecb) 将veca中的元素和b中的元素进行整体性交换
(暂时这点了,以后继续积累再补充,拿走不送)