第一百二十三天学习记录:C++提高:STL-vector容器(下)(黑马教学视频)

vector插入和删除

功能描述:
对vector容器进行插入、删除操作

函数原型:

push_back(ele); //尾部插入元素ele
pop_back(); //删除最后一个元素
insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele
insert(const_iterator pos, int count ,ele); //迭代器指向位置pos插入count个元素ele
erase(const_iterator pos); //删除迭代器指向的元素
erase(const_iterator start, const_iterator end); //删除迭代器从start到end之间的元素
clear(); //删除容器中所有元素
#include<iostream>
using namespace std;
#include<vector>//vector插入和删除
/*
push_back(ele); //尾部插入元素ele
pop_back(); //删除最后一个元素
insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele
insert(const_iterator pos, int count ,ele); //迭代器指向位置pos插入count个元素ele
erase(const_iterator pos); //删除迭代器指向的元素
erase(const_iterator start, const_iterator end); //删除迭代器从start到end之间的元素
clear(); //删除容器中所有元素
*/void printVector(vector<int>& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}void test01()
{vector<int>v1;//尾插v1.push_back(10);v1.push_back(40);v1.push_back(30);v1.push_back(50);v1.push_back(20);//遍历printVector(v1);//尾删v1.pop_back();printVector(v1);//插入  第一个参数是迭代器v1.insert(v1.begin(), 100);printVector(v1);v1.insert(v1.begin(), 2, 333);printVector(v1);//删除v1.erase(v1.begin());printVector(v1);//清空//v1.erase(v1.begin(),v1.end());v1.clear();printVector(v1);
}int main()
{test01();return 0;
}

在这里插入图片描述
总结:
尾插 push_back
尾删 pop_back
插入 insert(位置迭代器)
删除 erase(位置迭代器)
清空 clear

vector数据存取

功能描述:
对vector中的数据的存取操作

函数原型:

at(int idx); //返回索引idx所指的数据
operator[]; //返回索引idx所指的数据
front(); //返回容器中第一个数据元素
back(); //返回容器中最后一个数据元素
#include<iostream>
using namespace std;
#include<vector>//vector容器 数据存取void printVector(vector<int>& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}void test01()
{vector<int>v1;for (int i = 0; i < 10; ++i){v1.push_back(i);}//利用[]方式访问数组中元素for (int i = 0; i < v1.size(); ++i){cout << v1[i] << " ";}cout << endl;//利用at方式访问元素for (int i = 0; i < v1.size(); ++i){cout << v1.at(i) << " ";}cout << endl;//获取第一个元素cout << "第一个元素为:" << v1.front() << endl;//获取最后一个元素cout << "最后一个元素为:" << v1.back() << endl;
}int main()
{test01();return 0;
}

在这里插入图片描述
总结:
除了用迭代器获取vector容器中元素,[]和at也可以
front返回容器第一个元素
back返回容器最后一个元素

vector互换容器

功能描述:
实现两个容器内元素进行互换

函数原型:
swap(vec); //将vec与本身的元素互换

在这里插入图片描述

#include<iostream>
using namespace std;
#include<vector>//vector容器互换void printVector(vector<int>& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}//1、基本使用void test01()
{vector<int>v1;for (int i = 0; i < 10; ++i){v1.push_back(i);}cout << "交换前:" << endl;printVector(v1);vector<int>v2;for (int i = 10; i > 0; --i){v2.push_back(i);}printVector(v2);cout << "交换后:" << endl;v1.swap(v2);printVector(v1);printVector(v2);
}//2、实际用途
//巧用swap可以收缩内存空间
void test02()
{vector<int>v;for (int i = 0; i < 100000; i++){v.push_back(i);}cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;v.resize(3); //重新指定大小cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;//巧用swap收缩内存vector<int>(v).swap(v);cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;}int main()
{test01();test02();return 0;
}

在这里插入图片描述
总结:swap可以使两个容器互换,可以达到实用的收缩内存效果

vector预留空间

功能描述:
减少vector在动态扩展容量时的扩展次数
函数原型:
reserve(int len); // 容器预留len个元素长度,预留位置不初始化,元素不可访问

#include<iostream>
using namespace std;
#include<vector>//vector容器 预留空间void printVector(vector<int>& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}void test01()
{vector<int>v;//int num = 0;//统计开辟次数//int* p = NULL;//for (int i = 0; i < 100000; ++i)//{//	v.push_back(i);//	if (p != &v[0])//	{//		p = &v[0];//		num++;//	}//}//cout << "num = " << num << endl;//30//利用reserve预留空间v.reserve(100000);int num = 0;//统计开辟次数int* p = NULL;for (int i = 0; i < 100000; ++i){v.push_back(i);if (p != &v[0]){p = &v[0];num++;}}cout << "num = " << num << endl;//1
}int main()
{test01();return 0;
}

总结:如果数据量较大,可以一开始利用reserve预留空间

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

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

相关文章

2023 RISC-V中国峰会 安全相关议题汇总

目录 1、The practical use cases of the RISC-V IOPMP 2、构建安全可信、稳定可靠的RISC-V安全体系 3、Enhancing RISC-V Debug Security with hardware-based isolation 4、Closing a side door: Designing high-performance RISC-V core resilient to branch prediction…

2023年第2季社区Task挑战赛升级新玩法,等你来战!

第1季都有哪些有趣的作品&#xff1f; 在大家的共建下&#xff0c;FISCO BCOS开源生态不断丰富完善&#xff0c;涌现了众多实用技术教程和代码&#xff1a;基于数字身份凭证的业务逻辑设计&#xff0c;贡献了发放数字身份凭证的参考实现&#xff1b;提供企业碳排放、慈善公益等…

Mac unsupported architecture

&#xff08;瓜是长大在营养肥料里的最甜&#xff0c;天才是长在恶性土壤中的最好。——培根&#xff09; unsupported architecture 在mac的m系列芯片中容易出现此类问题&#xff0c;因为m系列是arm64的芯片架构&#xff0c;而有些nodejs版本或npm包的芯片架构是x86的&#x…

【脚踢数据结构】

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言,Linux基础,ARM开发板&#xff0c;软件配置等领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff01;送给自己和读者的一句鸡汤&#x1f914;&…

vi 编辑器入门到高级

vi 编辑器的初级用法vi 编辑器的工作模式1. 命令模式2. 文本输入模式3. 状态行vi 工作模式切换存储缓冲区 vi 编辑器命令1. 启动 vi2. 文本输入3. 退出 vi4. 命令模式下的 光标移动5. 命令模式下的 文本修改6. 从 命令模式 进入 文本输入模式7. 搜索字符串8. vi 在线帮助文档 v…

有血有肉的PPT

1、PPT是Powerpoint缩写 2、引申的含义是Powerpoint Power(力量/能量&#xff09; Point(观点/要点) 3、用PPT做的文档是讲演稿&#xff0c;讲演的内容要有力度&#xff0c;之所以要去演讲是为了能够影响受众 4、其次演讲稿上的内容要列出要点、表明观点&#xff0c;所以一般P…

Docker前置背景:架构演进

"但人类都环绕星球&#xff0c;我更愿追随彗星漂流~" 在正式引入架构演进之前&#xff0c;本小节会对一些比较重要、常见的概念进行介绍。 基本概念: (1)应用(application)/系统(system) 为了完成一整套服务的一个程序或者一组相互配合的程序群。生活例子类比&…

spring之AOP简单介绍

1.AOP的概念 AOP&#xff0c;Aspect Oriented Programming&#xff0c;面向切面编程&#xff0c;是对面向对象编程OOP的升华。OOP是纵向对一个 事物的抽象&#xff0c;一个对象包括静态的属性信息&#xff0c;包括动态的方法信息等。而AOP是横向的对不同事物的抽象&#xff0c;…

什么?200?跨域?

情景复现 今天我遇到了一件很奇怪的事情就是&#xff0c;当我请求后端网关&#xff0c;然后通过网关去请求相应的服务&#xff0c;都进行了跨域处理 但是&#xff0c;奇怪的是我在请求的时候&#xff0c;回来的响应码是200&#xff0c;但是报错了&#xff0c;报的还是200的同…

UEFI+win7+多系统安装

物理主机先安装的Windows10&#xff0c;同时需要安装Windows7的双系统 1.在https://next.itellyou.cn/下载Windows 7 ISO 2.使用Rufus制作U盘安装盘 注意一定要选择FAT32格式&#xff0c;否则安装过程会卡住 3.由于官方纯净的安装镜像默认不支持UEFI安装&#xff0c;有两种解决…

C++ 混合Python编程 及 Visual Studio配置

文章目录 需求配置环节明确安装的是64位Python安装目录 创建Console C ProjectCpp 调用 Python Demo 参考 需求 接手了一个C应用程序&#xff0c;解析csv和生成csv文件&#xff0c;但是如果要把多个csv文件合并成一个Excel&#xff0c;分布在不同的Sheet中&#xff0c;又想在一…

代码随想录算法训练营day28 | 93. 复原 IP 地址,78. 子集,90. 子集 II

目录 93. 复原 IP 地址 78. 子集 90. 子集 II 93. 复原 IP 地址 难度&#xff1a;medium 类型&#xff1a;回溯&#xff0c;切割 思路&#xff1a; 切割问题类似于组合问题&#xff1b; 需要注意的事&#xff0c;我们使用count来作为递归终止条件&#xff0c;count统计的事…

TIA博途软件无法搜索到CPU的解决办法汇总

TIA博途软件无法搜索到CPU的解决办法汇总 1. 检查电脑操作系统的兼容性 西门子对每个主要软件都会进行官方的兼容性测试过,其中重要一项是和 Windows 操作系统的兼容性,需要根据软件版本和 Windows 版本核对,如果不匹配,可能会有问题。 每个版本软件的安装条件可以参考以下…

沃罗诺伊图(Voronoi):帝国边界划分问题【2/2】

目录 一、说明 二、帝国边界划分问题 三、voronoi的正规定义 3.1 最简单的voronoi情况 3.2 在距离空间的数学描述 3.3 不同距离空间所得 Voronoi 单元不同 四、代码和库 4.1 算法库 4.2 参数说明 4.3 调用方法 五、后记 一、说明 Voronoi 单元也称为泰森多边形。 …

【LeetCode】1572.矩阵对角线元素的和

题目 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&#xff1a; 输入&#xff1a;mat [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;25 解释&#xff1a;对角线的和为&a…

Mysql 复杂查询丨联表查询

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; JOIN&#xff08;联表查询&#xff09; 联表查询&#xff08;Join&#xff09;是一种在数据库中使用多个表进行关联查询的操作。它通过使用 JOIN 关键字将多个表连接在…

软考圈地震!2023年下半年软考改为机考,报名时间推迟到9月4日

【1】通知原文 关于2023年下半年计算机软件资格考试有关工作调整的通知 各省、自治区、直辖市及计划单列市、新疆生产建设兵团&#xff0c;香港、澳门计算机软件资格考试考务管理机构: 为全面做好计算机软件资格考试安全防控工作&#xff0c;确保考试公正、公平。现将有关工…

NOSQL——redis的安装,配置与简单操作

目录 一、缓存的相关知识 1&#xff09;缓存的概念 2&#xff09;系统缓存 buffer与cache&#xff1a; 3&#xff09;缓存保存位置及分层结构 DNS缓存 应用层缓存 数据层缓存 分布式缓存服务&#xff1a; 数据库&#xff1a; 硬件缓存 二、关系型数据与非关系型数据…

大厂急了,30+名企“报复性招人”

&#x1f4e2;紧急通知&#xff01;紧急通知&#xff01; 2024届秋招已全面开启&#xff01; 没错&#xff01;你没听错&#xff01;&#xff01;&#xff01;2024届秋招真的开始了&#xff0c;你还沉浸在暑假温柔乡&#xff0c;有些人已经拿到了offer&#xff01;惊不惊喜意…

飞凌嵌入式i.MX9352嵌入式ARM开发板,让通信安全又稳定——EMC防护,静电、浪涌、脉冲4级防护能力

随着新基建的加快推进&#xff0c;智能制造迎来了更好的发展时机&#xff0c;嵌入式板卡等智能设备也在更多的应用场景中大放异彩。但随着现场的设备数量的剧增&#xff0c;环境中的各种干扰信号也随之增加&#xff0c;这就对设备间通信的安全性与稳定性提出了更高的要求。 1【…