笔记(三)——迭代器的基础理论知识
迭代器是一种检查容器内元素并且遍历容器内元素的数据类型。它提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。
一、vector容器的iterator类型
vector容器的迭代器属于随机访问迭代器,一次可以移动多个位置。
vector<int>::iterator iter;//变量名为iter
成员函数 | 功能 |
begin() | 返回指向容器中第一个元素的正向迭代器,若是const类型容器,在该函数返回的是常量正向迭代器。 |
end() | 返回指向容器最后一个元素之后一个位置的正向迭代器;如果是const类型容器,在该函数返回的是常量正向迭代器。此函数通常和begin()搭配使用。 |
rbegin() | 返回指向最后一个元素的反向迭代器;如果是const类型,在该函数返回的是常量反向迭代器。 |
rend | 返回指向容器第一个元素之后一个位置的反向迭代器;如果是const类型容器,在该函数返回的是常量正向迭代器。此函数通常和rbegin()搭配使用。 |
cbegin() | 和begin()功能类似,其返回的迭代器类型为常量正向迭代器,不能修改元素。 |
cend | 和end()功能类似,其返回的迭代器类型为常量正向迭代器,不能修改元素。 |
crbegin() | 和rbegin()功能类似,其返回的迭代器类型为常量反向迭代器,不能修改元素。。 |
crend | 和rend()功能类似,其返回的迭代器类型为常量反向迭代器,不能修改元素 |
#include<iostream>
#include<vector>
using namespace std;
int main()
{int arr[]={0,1,2,3,4};vector<int> vecInt;vecInt.assign(arr,arr+5);vector<int>::iterator t;vector<int>::reverse_iterator t1;
//1、 t=vecInt.begin();for(;t<vecInt.end();t++){cout<<*t<<" ";} cout<<endl;
// 输出:0,1,2,3,4 //2、 t=vecInt.end();t--; for(;t>=vecInt.begin();t--){cout<<*t<<" ";} cout<<endl;
// 输出:4,3,2,1,0 //3、t1=vecInt.rbegin();for(;t1<vecInt.rend();t1++){cout<<*t1<<" ";} cout<<endl;
// 输出:4,3,2,1,0 //4、 t1=vecInt.rend();t1--;for(;t1>=vecInt.rbegin();t1--){cout<<*t1<<" ";} cout<<endl;
// 输出:0, 1, 2, 3, 4return 0;
} 二、迭代器失效
插入元素后导致失效
#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int> vecInt1;vecInt1.push_back(0);vecInt1.push_back(1);vecInt1.push_back(2);vecInt1.push_back(3);vecInt1.push_back(4);vector<int>::iterator t;t=vecInt1.begin()+2;vecInt1.insert(t,5);cout<<*t<<endl;
// 本来应该指向2,插入后指向5 return 0;
}序列使容器删除元素失效
错误示范:
#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int> vecInt1;vecInt1.push_back(0);vecInt1.push_back(1);vecInt1.push_back(1);vecInt1.push_back(1);vecInt1.push_back(4);vector<int>::iterator t;t=vecInt1.begin();for(;t<vecInt1.end();t++){if(*t==1){vecInt1.erase(t);} } t=vecInt1.begin();for(;t<vecInt1.end();t++){cout<<*t<<" ";} cout<<endl;// 输出为0,1,4,没有删除干净1 return 0;
}由于删除后下一个元素会移到被删除的元素,如果此时指针仍自加1,导致该元素被忽略
解决办法:
#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int> vecInt1;vecInt1.push_back(0);vecInt1.push_back(1);vecInt1.push_back(1);vecInt1.push_back(1);vecInt1.push_back(4);vector<int>::iterator t;t=vecInt1.begin();for(;t<vecInt1.end();){if(*t==1){vecInt1.erase(t);} else{t++;} } t=vecInt1.begin();for(;t<vecInt1.end();t++){cout<<*t<<" ";} cout<<endl;// 输出为0,4return 0;
}
相关文章:
笔记(三)——迭代器的基础理论知识
迭代器是一种检查容器内元素并且遍历容器内元素的数据类型。它提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。一、vector容器的iterator类型vector容器的迭代器属于随机访问迭代器,一次可以移动多个位置。vector<int>::iterator …...
没有公网ip怎么外网访问nas?快解析内网端口映射到公网
对于NAS用户而言,外网访问是永远绕不开的话题。拥有NAS后的第一个问题,就是搞定NAS的外网访问。不过众所周知,并不是所有的小伙伴都能得到公网IP,由于IPV4资源的枯竭,一般不会被分配到公网IP。公网IP在很大程度上除了让…...
spring integration使用:消息转换器
系列文章目录 …TODO spring integration开篇:说明 …TODO spring integration使用:消息路由 spring integration使用:消息转换器 spring integration使用:消息转换器系列文章目录前言消息转换器(或者叫翻译器&#x…...
Vue3电商项目实战-商品详情模块7【21-商品详情-评价组件-头部渲染、22-商品详情-评价组件-实现列表】
文章目录21-商品详情-评价组件-头部渲染22-商品详情-评价组件-实现列表21-商品详情-评价组件-头部渲染 目的:根据后台返回的评价信息渲染评价头部内容。 yapi 平台可提供模拟接口,当后台接口未开发完毕或者没有数据的情况下,可以支持前端的开…...
地址,指针,指针变量是什么?他们的区别?符号(*)在不同位置的解释?
指针是C语言中的一个重要概念,也是C语言的一个重要特色;使用指针,可以使程序简洁、紧凑、高效。不掌握指针,就没有掌握C语言的精华。 目录 一、定义 1.1地址 1.2指针 1.3指针变量 1.4指针和指针变量的区别 二、使用指针变量…...
【MongoDB】一、MongoDB的安装与部署
【MongoDB】一、MongoDB的安装与部署实验目的实验内容实验步骤一、下载MongoDB安装包二、创建文件夹data及子文件夹db和log三、启动MongDB服务1. 在命令行窗口执行启动MongoDB服务命令2. 打开mongodb.log3. 打开浏览器进行启动验证四、登录MongoDB五、配置环境变量六、将MongDB…...
《爆肝整理》保姆级系列教程python接口自动化(二十三)--unittest断言——上(详解)
简介 在测试用例中,执行完测试用例后,最后一步是判断测试结果是 pass 还是 fail,自动化测试脚本里面一般把这种生成测试结果的方法称为断言(assert)。用 unittest 组件测试用例的时候,断言的方法还是很多的…...
MySQL的mvcc
mvcc(多版本并发控制) MVCC 是通过数据行的多个版本管理来实现数据库的并发控制 。使得在InnoDB的事务隔离级别下执行 一致性读操作有了保证。可以认为是行级锁的变种,在很多情况下可以避免加锁,开销更低 mvcc没有正式的标准&…...
vite:常见的配置
最近在捣鼓一下vite,因为自己一直在使用react,就选择vite、react来体验一下vite。 使用最简单的方法创建一个应用:yarn create vite,然后选择react框架。 vite默认配置是使用了defineConfig工具函数: import { defi…...
计算机图形学:liang算法和Cyrus-Beck算法
其中Cyrus-Beck算法呢,是计算一根直线一个多边形的交线段;liang算法是Cyrus的一个特例,即多边形刚好是矩形;先看看Cyrus算法的思路【从别的博客找的图片】:这很容易理解,点积>0时就可能中内部嘛…...
React组件之间的通信方式总结(上)
先来几个术语: 官方我的说法对应代码React elementReact元素let element<span>A爆了</span>Component组件class App extends React.Component {}无App为父元素,App1为子元素<App><App1></App1></App> 本文重点&…...
C++17 nodiscard标记符
文章目录前言弃值表达式nodiscard标记符函数非弃值声明类/枚举类/结构 非弃值声明返回类引用与类指针前言 在C 17中引入了一个标记符nodiscard,用于声明一个 “非弃值(no-discard)表达式”。那么在开始之前,我们需要了解一下什么是弃值表达式。 弃值表…...
SAP 寄售业务的标准流程
SAP的标准寄售业务,供应商提供的物料只有在公司使用之后才需支付应付账款,类似是一种先吃后付钱的餐饮流程。 SAP的寄售流程把实际业务中的供应商,采购方收货,采购方消耗物料,采购方依据消耗物料数量进行付款ÿ…...
操作系统高频知识
目录 一、线程与进程的区别 区别: 二、多进程和多线程区别 三、进程与程序的区别 三、死锁 1、是什么 2、产生的原因 3、产生的必要条件(4个) 4、如何预防 5、如何避免 6、如何检测 7、如何解除 一、线程与进程的区别 1、线程&a…...
加载预训练模型,模型微调,在自己的数据集上快速出效果
针对于某个任务,自己的训练数据不多,先找到一个同类的别人训练好的模型,把别人现成的训练好了的模型拿过来,换成自己的数据,调整一下参数,再训练一遍,这就是微调(fine-tuneÿ…...
VScode远程连接服务器-过程试图写入的管道不存在-could not establist connection to【已解决】
问题描述 使用服务器的过程中突然与服务器断连,报错如下:could not establist connection to [20:23:39.487] > ssh: connect to host 10.201.0.131 port 22: Connection timed out > [20:23:39.495] > 过程试图写入的管道不存在。 > [20…...
电子技术——B类输出阶
电子技术——B类输出阶 下图展示了一个B类输出阶的原理图,B类输出阶由两个互补的BJT组成,不同时导通。 原理 当输入电压 vI0v_I 0vI0 的时候,两个晶体管都截止输出电压为零。当 vIv_IvI 上升至超过0.5V的时候,此时 QNQ_NQN…...
【老卫搬砖】034期:HarmonyOS 3.1 Beta 1初体验,我在本地模拟器里面刷短视频
今天啊打开这个DevEco Studio的话,已经提示有3.1Beta1版本的一个更新啊。然后看一下它的一些特性。本文也演示了如何在本地模拟器里面运行HarmonyOS版短视频。 主要特性 新特性包括: Added support for Windows 11 64-bit and macOS 13.x OSs, as well…...
Day901.内部临时表 -MySQL实战
内部临时表 Hi,我是阿昌,今天学习记录的是关于内部临时表的内容。 sort buffer、内存临时表和 join buffer。这三个数据结构都是用来存放语句执行过程中的中间数据,以辅助 SQL 语句的执行的。 其中,在排序的时候用到了 sort bu…...
jstatd的启动方式与关闭方式
启动方式与注意事项: 启动方式: 前台启动不打印日志: jstatd -J-Djava.security.policyjstatd.all.policy -J-Djava.rmi.server.hostname服务器IP 前台启动并打印日志: ./jstatd -J-Djava.security.policyjstatd.all.policy -…...
如何使用AI大模型进行报表合并?一句话搞定复制粘贴
每个月底,财务小张都要做一件事:把1月到12月的销售明细表合成年报。12个Excel文件,每个文件30多列,字段名倒是一致,但数据量加起来几十万行。她的老办法是打开所有文件,逐个复制粘贴到一个新表里࿰…...
在Taotoken控制台中查看与分析API用量明细的实际操作
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Taotoken控制台中查看与分析API用量明细的实际操作 对于使用大模型API进行开发的团队或个人而言,清晰、准确地掌握AP…...
Lyrebird语音变声器完整指南:从安装到高级使用技巧
Lyrebird语音变声器完整指南:从安装到高级使用技巧 【免费下载链接】lyrebird 🦜 Simple and powerful voice changer for Linux, written with Python & GTK 项目地址: https://gitcode.com/gh_mirrors/lyr/lyrebird Lyrebird是一款专为Linu…...
3分钟解锁B站评论区的“读心术“:揭秘用户真实身份的完整指南
3分钟解锁B站评论区的"读心术":揭秘用户真实身份的完整指南 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分,支持动态和关注识别以及手动输入 UID 识别 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-comment-c…...
STM32 HAL库实战:手把手教你用匿名上位机V7显示自定义波形(附完整驱动代码)
STM32 HAL库与匿名上位机V7深度整合:自定义波形显示实战指南 在嵌入式系统开发中,数据可视化是调试和性能分析的关键环节。匿名上位机V7作为一款功能强大的国产调试工具,以其灵活的协议支持和直观的波形显示功能,成为众多工程师的…...
LRCGET:如何用500行代码重定义你的离线音乐体验
LRCGET:如何用500行代码重定义你的离线音乐体验 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 在数字音乐流媒体盛行的时代,我…...
ItsyBitsy RP2040与CircuitPython实战:从硬件解析到环境数据记录仪项目
1. 项目概述:为什么选择ItsyBitsy RP2040?如果你玩过树莓派Pico,或者用过Adafruit的Feather系列开发板,那么第一次拿到ItsyBitsy RP2040时,你可能会和我有同样的感觉:这东西也太小了。它的尺寸只有1.4英寸长…...
JetBrains IDE试用重置终极教程:一键恢复30天完整功能
JetBrains IDE试用重置终极教程:一键恢复30天完整功能 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾因JetBrains IDE试用期到期而烦恼?IntelliJ IDEA、PyCharm、WebStorm等强大开…...
软考资料全集
距离2026年上半年软考(5月开考)已不算遥远,现在正是着手准备的好时机。回顾这几年的备考历程,我也曾为找资料花费不少时间。趁着这次整理,我把手头积累的各科目复习资料——全部来自互联网公开渠道——系统地归拢了一下…...
【C#vsPython·第一阶段】int、string、bool?Python 的类型世界有点不一样
在 C# 里,int 最大能表示 2,147,483,647(约 21 亿)。超过这个数?对不起,溢出了,你得用 long。在 Python 里?2 ** 100 直接算,连眼都不眨一下。Python 的 int 没有上限,想…...
