当前位置:网站首页>STL容器——vector的基本操作
STL容器——vector的基本操作
2022-07-17 05:04:00 【哆啦k梦0219】
目录
前言
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.push_front(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的指针
find() //判断元素是否存在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());反向迭代器,实现元素对调
find(nums.begin(), nums.end(), target)//返回的是target第一次出现的地址,如果没有找到返回尾地址nums.end()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的位置(包括它)开始复制,覆盖掉原有元素。
边栏推荐
猜你喜欢

泰迪杯A题完整版 优化更新(4/23)

mysql数据库实验实训5,数据查询yggl数据库查询(详细)

无重复字符的最长字串

PyGame aircraft War 1.0 (step + window no response problem)

数据分析与数据挖掘实战案例本地房价预测(716):

md5 密码加密

用户的管理-限制

Hire the server, and the pytorch environment training yolov5 model tutorial deployed on pycharm professional edition. Server environment installation library file:

异步数据-短信验证码

Harmonyos fourth training notes
随机推荐
学习C语言第8天
Simple use of directexchange switches.
uniapp 表单(input、radio、picker)提交获取参数值
这么6的刷题网站你不会没听说过吧?你已经out 了?
PCA feature dimensionality reduction of machine learning + case practice
【C语言—零基础第六课】输入输出语句格式与复合语句
小程序云开发 上传图片到云存储
【Es6】forEach,for...in ,for...of专栏,让你通过项目案例快速分辨各种for语句的使用方式及区别(完整版)内部有详细注释
实习项目2-主页配置-我的数据模块
Pygame:外星人入侵
IText modify PDF Text
Cve-2020-10199 recurrence of nexus repository manager3 remote command execution vulnerability
SQL statement learning
决策树原理和案例应用-泰坦尼克号生存预测
md5 密码加密
SQL语句学习
Desensitization field example
HarmonyOS第二次培训笔记
关于New_Online_Judge_1081_哥德巴赫猜想的思考
Harmonyos third training notes