*作者在vs2019进行的编译和测试*
1.初识vectoor
1.1 什么是vector
vector(有方向的变量)是一个封装了动态大小数组的顺序容器,能够存放各种类型的对象
在使用vector之前,需要包含其头文件#include<vector>
1.2 vector的初始化
vector有各种各样的初始化方式,下面将逐一为大家介绍
1.
//定义了包具有10个整形元素的向量,尖括号中为元素类型
vector<int>a(10);
2.
//定义了具有5个整形元素的向量,且给出每个元素的初值3
vector<int>a(5, 3);
3.通过同类型的vector初始化
vector<int>a(10,4);//定义并且初始化向量a,使其具有10个数值为4的元素
vector<int>b(a);
4.使用数组初始化vector
int a[5]={2,3,4,5,6};//定义并初始化一个array a
//1.这种方式的初始化在vs2019中不会出现警告
vector<int>b(begin(a),end(a));
//2.通过数组a的地址初始化,地址是从0到5(左闭右开)
vector<int>b(a,a+5);
5.通过copy函数初始化
int a[6]={2,3,4,5,6,7} ;
//1.将a中的元素全部拷贝到向量b中
vector<int>b(a.begin(),a.end(),b.begin());
//2.拷贝的也可以是数组地址构成的区间
vector<int>b(a,a+6,b.begin()+6);
6.通过insert初始化
//将同类型vector对应的始末区间插入到新的vector中
veector<int>a(5,5);
vector<int>b;
b.insert(b.begin(),a.begin(),a.begin()+3);//将a[0]-a[2]的元素插入b中,b.size变为3
//也可以通过地址区间进行插入
int a1[7]={1,2,3,4,5,6,7};
vector<int>b;
b.insert(b.brgin(),a,a+3);//将a1[0]-a1[2]的元素插入b中
//也可以插入m个值为n的元素
vector<int>a;
a.insert(a.begin(),6,5);//插入6个值为5的元素
1.3vector对象的常用函数
vector<int>a(6,6);
a.size();//返回容器中元素个数
a.begin();//返回头部迭代器
a.rbegin();//返回逆首部迭代器
a.rend();//返回逆尾部-1迭代器
a.end();//返回尾部+1迭代器
a.front();//返回首个元素
a.back();//返回尾部元素
a.push_back(2);//在末尾添加一个数据
a.emplace_back(2);//与push_back相同
a.pop_back();//弹出最后一个元素
a.empty();//判断是否为空
a.insert();//在指定位置插入元素
insert(position,x);//在指定的位置前插入值为x的元素
insert(position,n,x);//在指定位置前插入n个大小为x的元素
insert(position,first,last);//在指定位置前插入另一个容器的一段序irst到last
a.erase();//删除指定位置的元素
a.erase(position);//删除一个元素
a.erase(first,last);//删除一个序列
a.clear();//清空a的元素
a.capacity();//返回a在内存中总共可以容纳多少个元素个数
int m;
a.resize(10, m);//将a的容量调至10个,多则删,少则补(m定义,值为m;没定义,值随机)
a.reserve(100);//将a的容量扩充至100,只有在需要给a添加大量数据的时候会使用
a.swap(b2);//b2为向量,将a中元素和b中的元素进行整体性交换
2.访问vector
在学习如何访问vector之前,我们要先学习一种可以遍历容器元素的数据类型--iterator(迭代器)
迭代器是一种可以遍历容器元素的数据类型,是一个变量,相当于容器和操纵容器的算法之间的中介,可以通过迭代器指向想要访问容器元素的地址
通过*x打印出元素值
//迭代器的定义
vector <int>::iterator it;//it能读写vector<int>的元素
vector <int>::const_iterator it;;//it只能读写,不能修改vector中的元素
2.1 顺序访问vector
1.向向量中添加元素
vector<int>a(10);
for (int i = 0; i < 10; i++)
{
a.push_back(i);
}
2.从数组中选择元素向向量里添加
int a[6] = { 1,2,3,4,5,6 };
vector<int>c;
for (int i = 0; i <= 4; i++)
c.push_back(a[i]);
3.从现有向量中选择元素向新向量中添加
int b[6] = { 2,3,4,5,6,7 };
vector<int>c(b, b + 4);
vector<int>a;
for (vector<int>::iterator it = c.begin(); it < c.end(); it++)
a.push_back(*it);
4.从文件中读取元素添加到向量中
ifstream in("data.txt");
vector<int>a;
for (int i; in >> i;)
a.push_back(i);
2.2 读取vector中的元素
1.通过下标方式读取
int b[6] = {5,6,7,8,9,10};
vector<int>a(b, b + 4);
for (int i = 0; i < a.size(); i++)
cout << b[i] << " ";
2.通过迭代器读取
//正序迭代
int b[6] = {2,4,6,8,10,12};
vector<int>a;
vector<int>a(b, b + 5);
for (vector<int>::iterator it = a.begin(); it < a.end(); it++)
cout << *it << " ";
//逆序迭代
for (vector<int>::reverse_iterator it = a.rbegin(); it != a.rend(); it++)
cout << *it << " ";
3.vector的几种算法
需要包含头文件algorithm
//a.begin()=<first=<a.end()
sort(first,last); //对a中的从起始到结束位置的元素进行从小到大排列
reverse(firstlast); //对a中的起始到结束位置的元素倒置,但不排列
copy(first,last,c.begin()+1); //把a中的起始到结束的位置元素复制到c中,从c.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
find(first,last,10); //在a中的从起始到结束位置的元素中查找10,若存在返回其在向量中的位置
希望这篇对于vector的解释能解决各位读者的问题,加油兄弟萌,我们一起进步!
第一篇文章肯定有不足的地方,欢迎大佬指正😊
感谢观看,求一个赞