STL:vector的使用(初识迭代器迭代器失效)

news2024/11/27 1:30:44

vector也是动态类型的顺序表,可以存储任意类型的元素
string是动态类型顺序表,只能存储char

  • vector< char >字符数组
    string 字符串
  • 字符串结尾有\0,而vector是一个泛型类型,不能因为字符串需要\0,而对每个类型最后都去设置一个\0
    字符串也有自己的特殊操作

vector有三个字段,

start指向空间起始位置
finish指向最后一个元素的下一个位置
endofstorage指向空间的末尾

写时拷贝&深拷贝

构造

在这里插入图片描述

  • 对于第二种构造方式,元素类型是自定义类型,则该类型的构造函数必须是无参或者全缺省,去创建一个匿名对象
  • 没有该方法则报错

遍历

在这里插入图片描述

插入删除

find方法是一个全局方法
返回在这个范围内,查找到的第一个元素的迭代器,没有找到则返回last

在这里插入图片描述

对于第一种插入函数,其返回值是返回插入位置的迭代器。其余两种插入的返回值都是void

两个erase函数返回值都是迭代器

迭代器

解释迭代器:有两种
1.就是指针→解引用p获得成员;++或–;==或者!=
2.实际上是将指针重新封装形成的一种新类型

对于vector来说,它的迭代器就是typedef T* iterator

迭代器失效:

  • 迭代器本质就是指针
    →迭代器失效就是指针失效
    →指针失效的原因
    →指针指向的空间不存在成为了野指针

vector在以下情况会引起迭代器失效:

  • 扩容
    所有会引起扩容的操作push_back / reserve / resize / insert / 赋值=/assign
    扩容会释放原空间,将内容拷贝到新空间,而迭代器指向的空间被释放
  • 删除
    erase(iterator pos)删除指定位置pos上的元素,删除后pos迭代器就失效了(每删一次都会失效一次)
    设计原因:要删最后一个元素,删完后没有其它的元素往前移,
    所以该函数有返回值,会返回下一个地址
  • 交换 v1.swap(v2)
    交换前it1指向v1的起始位置,只交换了内容,没有交换指针
    交换完成后,v1使用了v2的空间,it1还指向原空间

迭代器失效后如何处理:要让迭代器重新指向

auto it=v.begin();
while (it!=v.end())
{
	it=v.earse(it);//earse有返回值,返回下一个位置,直接用it接收
	++it
}
//erase返回值:返回删除位置上下一个位置的元素,所以需对其返回值接收

vector创建二维数组

在这里插入图片描述

以上方式都是针对数组每行元素相同

memcpy浅拷贝的理解

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

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

相关文章

分布式光伏并网防孤岛保护装置AM5SE-IS

分布式光伏并网防孤岛保护装置AM5SE-IS 应用场景 防孤岛原理&#xff1a;防孤岛保护装置检测到并网点有逆功率、频率突变、 等异常数据时&#xff0c;即发生孤岛现象时&#xff0c;装置可配合断路器快速切除并网点&#xff0c;使本站与电网侧快速脱离&#xff0c;保证整个电站…

jmeter随记3:常用jmeter功能(附带场景)

常用jmeter功能&#xff08;附带场景&#xff09; 一、jmeter其他特性1、请求的接口有多个 且 域名相同2、 jmeter支持统一管理参数的设置a、创建HTTP Header Managerb、用户定义参数c、csv数据文件设置 3、接口a的返回值作为 接口b的入参a、 json提取器b、 正则表达式 4、if c…

【密码学】二、古典密码

古典密码 1.置换密码1.1列置换密码1.2周期置换密码 2.代换密码2.1单表代换密码2.1.1凯撒密码2.1.2仿射密码 2.2多表代换密码2.2.1维吉尼亚密码2.2.2普莱费尔密码 3.轮转密码3.1恩尼格玛密码机Enigma3.1.1Enigma加密3.1.1Enigma解密 4.古典密码的分类5.古典密码的统计分析5.1单表…

【事业单位-语言理解1】中心理解02

【事业单位-语言理解1】中心理解02 1.中心理解1.1 并列关系1.2 主题词1.3程度词&#xff0c;表示强调 二、标题填入题&#xff08;优先考虑主题词&#xff09;三、词句理解题 1.中心理解 解题思路 1.1 并列关系 涉及时间顺序 注意选项不要逻辑不当 并列关系的时候&…

07统计模型练习

使用SPSS进行分析求解 第一题 下表1.1是中国1994-2016年国内旅游总花费Y、国内生产总值X1、铁路里程X2和公路里程X3的数据,请据此分析如下问题: (1)就建立简单线性回归模型,分别分析中国国内旅游总花费与国内生产总值、铁路里程和公路里程数据的数量关系。 (2)对建立的回归模型…

K8S下如何搭建eureka集群

背景 传统应用上云&#xff0c;基于传统应用需要考虑上云的方案和改造成本&#xff0c;这也是传统应用上云过程中的难点&#xff0c;本篇介绍3台eureka搭建的方案。 方案一 此方案借助了K8S中Service的一些功能。 这种方案是传统方案的简单迁移版本&#xff0c;比较易于理解…

前端 | ( 十一)CSS3简介及基本语法(上) | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 系列笔记&#xff1a; 【HTML4】&#xff08;一&#xff09;前端简介【HTML4】&#xff08;二&#xff09;各种各样的常用标签【HTML4】&#xff08;三&#xff09;表单及HTML4收尾…

一键批量JSON标注转PNG图片工具V1.1,支持labelme快捷矩形、圆以及轮廓标注

上次发布了一个批量将labelme标注的json文件转换为png文件工具&#xff0c;但是当时只是想着自己用的&#xff0c;功能相当简单&#xff0c;一些网友使用之后跟我反馈这玩意真”垃圾“&#xff0c;很多情况都没有进行设想&#xff0c;所以在功能上很欠缺。由于小陶这几天在外地…

Rust vs Go:常用语法对比(三)

题图来自When to use Rust and when to use Go[1] 41. Reverse a string 反转字符串 package mainimport "fmt"func Reverse(s string) string { runes : []rune(s) for i, j : 0, len(runes)-1; i < j; i, j i1, j-1 { runes[i], runes[j] runes[j], runes[i]…

高等数学❤️第一章~第三节~极限❤️连续函数的运算与初等函数的连续性~连续函数的运算

【精讲】高等数学中连续函数的运算 博主&#xff1a;命运之光的主页 专栏&#xff1a;高等数学 目录 【精讲】高等数学中连续函数的运算 导言 一、连续函数的运算规则 二、连续函数的性质 必需记忆知识点 例题&#xff08;用于熟悉高等数学中连续函数的运算&#xff09;…

【Java基础教程】(四十二)多线程篇 · 上:多进程与多线程、并发与并行的关系,多线程的实现方式、线程流转状态、常用操作方法解析~

Java基础教程之多线程 上 &#x1f539;本节学习目标1️⃣ 线程与进程&#x1f50d;关于多进程、多线程、并发与并行之间的概念关系&#xff1f; 2️⃣ 多线程实现2.1 继承 Thread 类2.2 实现 Runnable 接口2.3 多线程两种实现方式的区别2.4 利用 Callable 接口实现多线程2.5 …

Windows Server 2012 搭建网关服务器并端口转发

需求 使用 Windows server 作为Hyper-V 虚拟出许多虚拟机&#xff0c;基本上都分配了内网地址&#xff0c;现在需要这些虚拟机访问外网&#xff0c;或者外网直接访问这些虚拟机&#xff0c;必须配置一个网关服务器。我决定直接使用 Windows 的远程访问中的 NAT 服务来完成。 …

Ubuntu 上编译protobuf 指

欢迎大家关注我的B站主页MYVision_MY视界的个人空间-MYVision_MY视界个人主页-哔哩哔哩视频 下载protobuf GitHub - protocolbuffers/protobuf: Protocol Buffers - Googles data interchange format 根据需要从release 中下载指定的版本 下载完之后&#xff0c;根据提供的C…

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据

在我之前的文章&#xff1a; Elasticsearch&#xff1a;如何使用 Elasticsearch ingest 节点来丰富日志和指标 Elasticsearch&#xff1a;enrich processor &#xff08;7.5发行版新功能&#xff09; 我有详细描述如何使用 ingest pipeline 来丰富数据。在今天的文章中里&am…

Stable Diffusion入门笔记(自用)

学习视频&#xff1a;20分钟搞懂Prompt与参数设置&#xff0c;你的AI绘画“咒语”学明白了吗&#xff1f; | 零基础入门Stable Diffusion保姆级新手教程 | Prompt关键词教学_哔哩哔哩_bilibili 1.图片提示词模板 2.权重&#xff08;提示词&#xff09; 无数字 (flower)//花的…

1 快速构建mybatis项目

1.1 使用Maven的quickstart框架 注意是不出现w的quickstart&#xff1a; 1.2 加入依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</s…

如何评测一个大语言模型?

编者按&#xff1a;大型语言模型&#xff08;Large language models, LLMs&#xff09;因其在学术界和工业界展现出前所未有的性能而备受青睐。随着 LLMs 在研究和实际应用中被广泛使用&#xff0c;对其进行有效评测变得愈发重要。近期已有多篇论文围绕大模型的评测进行研究&am…

二级分类基本实现步骤(小兔鲜儿)【Vue3】

二级分类 整体认识和路由配置 二级分类功能描述 配置二级路由 准备组件模版 <script setup></script><template><div class"container "><!-- 面包屑 --><div class"bread-container"><el-breadcrumb separa…

OA会议管理系统之会议发布(内含原型图项目介绍多功能下拉框源码)

目录 一、前言 1.什么是OA会议 2.OA会议项目背景 二、会议发布功能实现 1.功能介绍 2.功能分析 1.原型图以及数据表分析 2.查看官网搭建JSP页面 3.功能实现 1.实体类 2.dao层 3.JSP页面 4.Web层 4.案例演示 一、前言 1.什么是OA会议 会议OA指的是会议办公自动化…

设计模式结构型——外观模式

目录 什么是外观模式 外观模式的实现 外观模式的特点 什么是外观模式 外观模式&#xff08;Facade Pattern&#xff09;&#xff1a;又叫作门面模式&#xff0c;归属于结构型模式。外观模式定义了提供了定义了一个统一的高层接口&#xff0c;即为子系统中的一组接口提供一个…