vector用法详解

*作者在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的解释能解决各位读者的问题,加油兄弟萌,我们一起进步!

第一篇文章肯定有不足的地方,欢迎大佬指正😊

感谢观看,求一个赞

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值