如何熟练使用vector?

在这里插入图片描述

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻推荐专栏1: 🍔🍟🌯C语言初阶
🐻推荐专栏2: 🍔🍟🌯C语言进阶
🔑个人信条: 🌵知行合一
🍉本篇简介:>:介绍vector的使用

vector官网链接:传送门

目录

  • 一、构造函数
    • (1)无参构造
    • (2)初始化为n个值
    • (3) 迭代器区间初始化
    • (4)拷贝构造
  • 二、容量操作
    • (1) 一览表
    • (2) 代码演示
  • 三、修改与访问
    • (1) push_back && pop_back
      • assign()
    • (2) insert()
    • (3) erase()函数
    • (4) swap()
    • (5) `[]`运算符重载

一、构造函数

在这里插入图片描述

构造函数含义
vector (const allocator_type& alloc = allocator_type());无参构造
vector(size_type n, const value_type& val = value_type())初始化为nval
vector (InputIterator first, InputIterator last,const allocator_type& alloc = allocator_type())迭代器区间初始化
vector (const vector& x);拷贝构造

(1)无参构造

默认什么元素也没有.
有效元素个数:size=0
容量:capacity=0;

	//无参构造vector<int> v1;//auto it1 = v1.begin();//可以使用auto自动推导类型vector<int>::iterator it1 = v1.begin();while (it1 != v1.end()){cout << *it1 << " ";it1 ++ ;}cout << "v1.size=" << v1.size() << endl;cout << "v1.capacity=" << v1.capacity() << endl;cout << endl;

运行结果:

v1.size=0
v1.capacity=0

(2)初始化为n个值

nval去初始化vector;

	//初始化为n个值vector<int> v2(4,0);//auto it2 = v2.begin();vector<int>::iterator it2 = v2.begin();while (it2 != v2.end()){cout << *it2 << " ";it2++;}cout << endl;

运行结果:

0 0 0 0

(3) 迭代器区间初始化

用一个迭代器区间进行初始化,这里采用数组的头和尾作为迭代器区间.

	//迭代器区间初始化int a3[10] = { 1,3,4,5,6,7,8,98,100,11 };vector<int> v3(a3, a3 + 10);//注意这里给的是+10,因为迭代器的end是指向最后一个有效元素的下一个位置,左闭右开auto it3 = v3.begin();while (it3 != v3.end()){cout << *it3 << " ";it3++;}cout << endl;

运行结果:

1 3 4 5 6 7 8 98 100 11

(4)拷贝构造

	//拷贝构造vector<int> v4(v3);//v3就是上面的迭代器区间初始化好的v3auto it4 = v4.begin();while (it4 != v4.end()){cout << *it4 << " ";it4++;}cout << endl;

运行结果:

1 3 4 5 6 7 8 98 100 11

二、容量操作

在这里插入图片描述

(1) 一览表

接口说明
size()有效数据的个数
resize()改变有效数据的个数
capacity()容量大小
empty()判空
reserve()改变容量大小

(2) 代码演示

void test2()
{int a1[10] = { 1,3,4,5,6,7,8,98,100,11 };vector<int> v1(a1, a1 + 10);cout << "v1.size()=" << v1.size() << endl;//显示有效数据的个数cout << "v1.capacity()=" << v1.capacity() << endl;//显示容量的大小cout << "v1.empty()=" << v1.empty() << endl;//判断容器是否为NULLcout << endl;v1.resize(5);//改变有效数据的个数cout << "v1.size()=" << v1.size() << endl;cout << "v1.capacity()=" << v1.capacity() << endl;vector<int>::iterator it1 = v1.begin();while (it1 != v1.end()){cout << *it1 << " ";it1++;}cout << endl;v1.resize(15,66);cout << "v1.size()=" << v1.size() << endl;cout << "v1.capacity()=" << v1.capacity() << endl;cout << endl;it1 = v1.begin();while (it1 != v1.end()){cout << *it1 << " ";it1++;}cout << endl;v1.reserve(10);//改变容量的大小.cout << "v1.capacity()=" << v1.capacity() << endl;v1.reserve(50);cout << "v1.capacity()=" << v1.capacity() << endl;}

运行结果:
在这里插入图片描述

三、修改与访问

在这里插入图片描述

接口说明
assign()将新内容覆盖给容器,替换其当前内容,并相应地修改其大小。
push_back()尾插
pop_back()尾删
insert()指定位置pos之前插入
erase()删除指定位置pos的值
swap()交换两个容器
operator[ ]()下标访问运算符重载

(1) push_back && pop_back

尾插和尾删相信大家已经比较熟悉了.

assign()

assign函数需要注意.
void assign (size_type n, const value_type& val);

如果n<size,则是将nval将原有数据覆盖,令size=n,而不修改容量.
如果n>size,则先扩容,再将nval值存入.

	//push_back &&pop_backint a1[5] = { 1,2,3,4,5 };vector<int> v1(a1, a1 + 5);for (auto itt : v1){	//1 2 3 4 5cout << itt << " ";}cout << endl;//尾插v1.push_back(6);v1.push_back(7);for (auto itt : v1){	//1 2 3 4 5 6 7cout << itt << " ";}cout << endl;//尾删v1.pop_back();for (auto itt : v1){	//1 2 3 4 5 6cout << itt<<" ";}cout << endl;//将新内容覆盖给容器,替换其当前内容,并相应地修改其大小v1.assign(5, 2);for (auto itt : v1){	//2 2 2 2 2cout << itt << " ";}cout << endl << v1.size() << " " << v1.capacity() << endl;//5 7cout << endl;

运行结果:

1 2 3 4 5
1 2 3 4 5 6 7
1 2 3 4 5 6
2 2 2 2 2
5 7

(2) insert()

指定位置pos之前插入.
在这里插入图片描述

代码演示:

	int a1[5] = { 1,2,3,4,5 };vector<int> v1(a1, a1 + 5);for (auto itt : v1){cout << itt << " ";}cout << endl;//iterator insert(iterator position, const value_type & val);v1.insert(v1.begin() + 2, 66);//在第三个位置的前面插入数据.for (auto itt : v1){cout << itt<<" ";}cout << endl;//void insert(iterator position, size_type n, const value_type & val);v1.insert(v1.begin() + 5, 5, -1);//在第六个位置的前面插入5个-1.for (auto itt : v1){cout << itt << " ";}cout << endl;int a2[5] = { 1,2,3,4,5 };int a3[5] = { 6,7,8,9,10 };vector<int> v2(a2, a2 + 5);for (auto itt : v2){cout << itt << " ";}cout << endl;//void insert (iterator position, InputIterator first, InputIterator last);v2.insert(v2.begin()+5,a3 ,a3 + 5);for (auto itt : v2){cout << itt << " ";}cout << endl;

运行结果:
在这里插入图片描述

(3) erase()函数

在这里插入图片描述

删除指定位置pos的值

	//eraseint a4[10] = { 1,2,3,4,5,6,7,8,9,10 };vector<int> v4(a4, a4 + 10);for (auto itt : v4){cout << itt << " ";}cout << endl;//iterator erase (iterator position);v4.erase(v4.begin() + 1);for (auto itt : v4){cout << itt << " ";}cout << endl;//iterator erase (iterator first, iterator last);v4.erase(v4.begin()+4, v4.begin() + 9);for (auto itt : v4){cout << itt << " ";}cout << endl;

运行结果:
在这里插入图片描述

(4) swap()

用于交换两个容器,注意观察交换后容量的变化.

//swap//void swap(vector & x);int a5[10] = { 1,2,3,4,5,6,7,8,9,10 };vector<int> v5(a5, a5 + 10);int a6[10] = { 2,4,6,8,10 };vector<int> v6(a6, a6+5);cout << "v5=";for (auto itt : v5){cout << itt << " ";}cout << endl;cout << "v6=";for (auto itt : v6){cout << itt << " ";}cout << endl;swap(v5, v6);cout << endl;cout << "v5=";for (auto itt : v5){cout << itt << " ";}cout << endl;cout << "v6=";for (auto itt : v6){cout << itt << " ";}cout << endl;cout << "v5.capacity()" << v5.capacity();cout << endl;cout << "v6.capacity()" << v6.capacity();cout << endl;

运行结果:
在这里插入图片描述

(5) []运算符重载

可以像数组一样通过下标直接访问.

	//[]int a7[10] = { 1,2,3,4,5,6,7,8,9,10 };vector<int> v7(a5, a5 + 10);cout << "v7=";for (int i = 0; i < 10; i++){cout << v7[i] << " ";}

v7=1 2 3 4 5 6 7 8 9 10

vector的使用就分享到这里了.下一期vector模拟实现见.

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/119525.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据集收集列表(opencv,机器学习,深度学习)持续更新

opencv 车牌识别数据集 opencv 手写数字识别数据集 机器学习 印第安糖尿病 Pima Indians数据集 &#xff0c;下载地址 Boston波士顿房价数据集 &#xff0c;下载

MetInfo5.0文件包含漏洞

MetInfo历史版本与文件 环境在这里下载&#xff0c;使用phpstudy搭建 我们来看到这个index.php&#xff0c;如下图所示&#xff0c;其中定义了fmodule变量与module变量&#xff0c;其中require_once语句表示将某个文件引入当前文件&#xff0c;在这个代码中&#xff0c;通过r…

PostgreSQL问题记录:column “...“ does not exist

在PostgreSQL中&#xff0c;不论是在pgAdmin中&#xff0c;还是在命令行控制台里面&#xff0c;在SQL语句中表示属性值的总会遇到ERROR: column “…” does not exist这样的错误&#xff0c;比如下面的语句&#xff1a; 解决方案&#xff1a;将 “txt2txt” 的双引号改成单引…

配置本地maven

安装maven安装包 修改环境变量 vim ~/.bash_profile export JMETER_HOME/Users/yyyyjinying/apache-jmeter-5.4.1 export GOROOT/usr/local/go export GOPATH/Users/yyyyjinying/demo-file/git/backend/go export GROOVY_HOME/Users/yyyyjinying/sortware/groovy-4.0.14 exp…

虚拟机的安装

需要的工具 ①VMware Workstation 17 提取链接&#xff1a;https://pan.baidu.com/s/1e2p_wlYwdM-JxbXVMb3W0Q?pwd16ed 提取码&#xff1a;16ed ②Redhat镜像 9.1版本提取链接&#xff1a;https://pan.baidu.com/s/1sJC275e2d_9tPDElC83o2g?pwdss9x 提取码&#xff1a;…

Linux系统Ubuntu配置Docker详细流程

本文介绍在Linux操作系统Ubuntu的18.04及以上版本中&#xff0c;配置开源容器化平台和工具集Docker的详细方法&#xff1b;其中&#xff0c;我们以配置Docker平台的核心组件之一——Docker Engine为例来详细介绍。 首先&#xff0c;大家需要明确&#xff0c;我们常说的Docker&a…

pytorch(b站小土堆学习笔记P1-P15)

P3. Python学习中的两大法宝函数&#xff08;当然也可以用在PyTorch&#xff09; import torch#查看pytorch有哪些指令 print(dir(torch)) print(dir(torch.cuda)) #查看每条指令怎么用 help(torch.cuda.is_available) P4. PyCharm及Jupyter使用及对比 P5 dataset和dataloade…

【算法】滑动窗口

滑动窗口应用场景 关键词&#xff1a; 满足xxx条件&#xff08;计算结果&#xff0c;出现次数&#xff0c;同时包含&#xff09; 最长/最短 子串/子数组/子序列 例如&#xff1a;长度最小的子数组 滑动窗使用思路&#xff08;寻找最长&#xff09; 核心&#xff1a;左右双指…

2021年06月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:逆波兰表达式 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 …

基于MQTT协议的物联网关

随着工业领域的不断发展&#xff0c;数字化转型已经成为企业迈向未来的必由之路。在这个数字化浪潮中&#xff0c;HiWoo Box以其强大的功能和创新的设计&#xff0c;在工业物联网领域被越来越多的人所熟知。特别是其基于MQTT协议的物联网关能力&#xff0c;也为企业实现智能化数…

无门槛访问ChatGPT升级版-数据指北AI

大家好&#xff0c;我是脚丫先生 (o^^o) 给小伙伴们介绍ChatGPT升级版不需要任何门槛&#xff0c;不需要单独搞账号&#xff0c;只要邮箱登录的方式&#xff0c;即可访问平台&#xff0c;以用户体验为首要&#xff0c;让所有人都能无门槛的使用目前市面上最强大的AI智能聊天&a…

ubuntu20.04+ROS noetic在线运行单USB双目ORB_SLAM

双目摄像头主要有以下几种&#xff0c;各有优缺点。 1.单USB插口&#xff0c;左右图像单独输出2.双USB插口&#xff0c;左右图像单独输出&#xff08;可能存在同步性问题&#xff09;3.双USB插口&#xff0c;左右图像合成输出4.单USB插口&#xff0c;左右图像合成输出 官方版…

Java实现获取微信小程序scheme码报错

如标题所见&#xff0c;使用Java获取小程序scheme时除了出现文档中的常见错误&#xff0c;我将我调试的时候遇到的错误和解决方式分享出来方便大家少花一部分时间解决该问题。&#xff08;往下划有结论节省时间&#xff09;。 获取scheme码之前需要先获取access_token&#xff…

使用Postman如何在接口测试前将请求的参数进行自定义处理

1、前言 当我们使用 Postman 进行接口测试时&#xff0c;对于简单的不需要处理的接口&#xff0c;直接请求即可&#xff0c;但是对于需要处理的接口&#xff0c;如需要转码、替换值等&#xff0c;则就麻烦一些&#xff0c;一般我们都是先手动把修改好的值拷贝到请求里再进行请…

Jaeger的经典BUG原创

前端&#xff0c;笔者在使用Jaeger进行Trace监控的时候&#xff0c;当数据量增大到一定数量级时&#xff0c;出现了一次CPU暴增导致节点服务器挂了的经典案例&#xff0c;这里对案例进行一个简单的抽象&#xff0c;供大家参考&#xff1a; 首先通过pprof对耗时的函数进行定位&…

spacy安装旧版本en_core_web_sm的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布

一、MQTT介绍 1.1 什么是MQTT&#xff1f; MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订阅&#xff08;publish/subscribe&#xff09;模式的“轻量级”通讯协议&#xff0c;该协议构建于…

排序算法学习记录-快速排序

快速排序 快速排序关键在于确定一个中间值&#xff0c;使得小于这个中间值的数在左边&#xff0c;大于这个中间值的数在右边。那么中间值该如何确定呢&#xff1f;有以下几种做法 首元素&#xff0c;也就是arr[l]尾元素&#xff0c;也就是arr[r]中间元素&#xff0c;也就是ar…

JavaScript中的事件委托(event delegation)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript事件委托⭐ 事件冒泡&#xff08;Event Bubbling&#xff09;⭐ 事件委托的优点⭐ 如何使用事件委托⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启…

CocosCreator3.8研究笔记(二)windows环境 VS Code 编辑器的配置

一、设置文件显示和搜索过滤步骤 为了提高搜索效率以及文件列表中隐藏不需要显示的文件&#xff0c; VS Code 需要设置排除目录用于过滤。 比如 cocoscreator 中&#xff0c;编辑器运行时会自动生成一些目录&#xff1a;build、temp、library&#xff0c; 所以应该在搜索中排除…