STL容器——vector的基本操作

目录

一、vector的声明(初始化)

二、增:添加元素

三、删:删除元素

四、改:修改元素

五、查:遍历元素

总结


前言

C++ STL是一个非常强大的容器库,其中动态数组vector是最方便的容器之一。接下来介绍vector的一些基本操作,其主要操作依然是“增 删 改 查”:

一、vector的声明(初始化)

vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,本文中以存储整形为例。

对vector的初始化有以下几种常用方式,只需熟练掌握红色标注即可:

1)vector <int> ver = vector<int>();或  vector <int> ver;//此时定义的ver所占空间不确定,可动态添加新空间

(2) vector<int> ver(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。

(3)vector<int> ver(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1

(4)vector<int> ver(b); //用b向量来创建ver向量,整体复制性赋值

(5)vector<int> ver(b.begin(),b.begin()+3); //定义了ver值为b中第0个到第2个(共3个)元素

(6)int b[7]={1,2,3,4,5,9,8}; vector<int> ver(b,b+7); //从数组中获得初值

(7)vector<vector<int>> ver; //二维向量

二、增:添加元素

int t;

cin>>t;

ver.push_back(t);//将t添加到vector数组末端
ver.insert(ver.begin()+n, t);//将t插入到ver.begin()+n  这里参数不可以写int型,应写指针!!
注意:

若用cin>>输入数据或者用下标方式ver[i]=t赋值,那vector必须有空间,可以用resize()赋空间或者直接用push_back(t)添加元素即可。

也可以初始化时用vector <int> ver(n);这样就可以cin>>输入数据或者用下标方式ver[i]=t赋值,但是这样就不可以用push_back(t)添加数据,因为push_back(t)是向末尾添加数据!!!而前n个默认为0,push_back(t)并不会修改前n个的值。

三、删:删除元素

ver.erase(iterator p);//删除迭代器p指向的位置的元素

ver.erase(ver.begin()+1,ver.begin()+3); //删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+ 3(不包括它)

ver.pop_back();//删除最后一个元素
ver.pop_front();//删除第一个元素

四、改:修改元素

待补充ing……详情看总结部分

五、查:遍历元素

//遍历元素可以有两种方法:

//1.下标遍历 
for (int i = 0; i < n; i++)
    cout << ver[i] << " ";


//2.迭代器遍历vector <int>::iterator p;
for(auto p=ver.begin();p!=ver.end();p++)
    cout << *p << " ";
其中 auto代表 vector <int>::iterator(迭代器类型)
注意:*(p+1)== *(ver.begin()+1) == ver[i+1]


总结

vector还包含着各种功能的函数,总结如下(部分):

push_back()  //在数组的最后添加一个数据


pop_back() //去掉数组的最后一个数据

at()  //得到编号位置的数据

begin() //得到数组头的指针

end() //得到数组的最后一个单元+1的指针

front() //得到数组头的引用

back() //得到数组的最后一个单元的引用

max_size() //得到vector最大可以是多大

capacity() //当前vector分配的大小

size() //当前使用数据的大小

capacity(); //返回a在内存中总共可以容纳的元素个数

a.reserve(100); //改变当前vecotr所分配空间的大小将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100

a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,增加的元素其值默认为0

a.resize(10,2); //将a的现有元素个数调至10个,多则删,少则补,增加的元素其值为2

erase() //删除指针指向的数据项

clear() //清空当前的vector

rbegin() //将vector反转后的开始指针返回(其实就是原来的end-1)

rend() //将vector反转构的结束指针返回(其实就是原来的begin-1)

empty() //判断vector是否为空

swap() //与另一个vector交换数据


a.swap(b); //b为向量,将a中的元素和b中的元素进行整体性交换

reverse(obj.begin(),obj.end());反向迭代器,实现元素对调


auto it = find(nums.begin(), nums.end(), target)//返回的是target第一次出现的地址it,如果没有找到返回尾地址nums.end() 使用时需要algorithm头文件。

int index = distance(nums.begin(),it);//返回it距离数组第一个元素的距离,即it所指元素下表。

sort(a.begin(),a.end(),cmp); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列 cmp可自定义,也可以没有(没有的话默认从小到大)

copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素。

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dorakmon0219

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值