C++之迭代器
迭代器
C++中,迭代器就是类似于指针的对象,但比指针的功能更丰富,它提供了对对象的间接访问,每个迭代器对象代表容器中一个确定的地址。

举个例子:
void test()
{vector<int> vv={1,2,3,4,5};for(vector<int>::iterator it=vv.begin();it!=vv.end();it++){cout<<*it<<" ";}cout<<endl;
}
//1 2 3 4 5迭代器的分类
正向迭代器
只能使用++运算符从左向右遍历容器,每次沿容器向右移动一个元素。
容器名<元素类型>::iterator 迭代器名; // 正向迭代器。
容器名<元素类型>::const_iterator 迭代器名; // 常正向迭代器。
相关的成员函数:
iterator begin();
const_iterator begin();
const_iterator cbegin(); // 配合auto使用。
iterator end();
const_iterator end();
const_iterator cend();
双向迭代器
具备正向迭代器的功能,还可以反向(从右到左)遍历容器(也是用++),不管是正向还是反向遍历,都可以用--让迭代器后退一个元素。
容器名<元素类型>:: reverse_iterator 迭代器名; // 反向迭代器。
容器名<元素类型>:: const_reverse_iterator 迭代器名; // 常反向迭代器。
相关的成员函数:
reverse_iterator rbegin();
const_reverse_iterator crbegin();
reverse_iterator rend();
const_reverse_iterator crend();
随机访问迭代器
具备双向迭代器的功能,还支持以下操作:
用于比较两个迭代器相对位置的关系运算(<、<=、>、>=)。
迭代器和一个整数值的加减法运算(+、+=、-、-=)。
支持下标运算(iter[n])。
迭代器的失效问题
vector迭代器失效的几种情况

1. 扩容可能引起迭代器失效(insert,assign,push_back都可能引起扩容)
void test3()
{vector<int>v;for (int i = 0; i < 5; i++)v.push_back(i);cout << "容量:" << v.capacity() << endl;cout << "大小:" << v.size() << endl;auto it = v.begin();int size = v.capacity(); //记录插入数据之前的容量v.push_back(6);v.push_back(7); cout << "容量:" << v.capacity() << endl;cout << "大小:" << v.size() << endl;if (v.capacity() > size) //判断是否扩容{cout << "扩容了!" << endl;}while (it != v.end()){cout << *it << " ";it++;}
}
分析:
这是为什么呢?不难发现,vector是序列式容器,在内存中是一块连续的内存,当内存不足需要扩容时,需要将原来的空间释放掉,重新开辟一片连续的空间,所以这样操作原来的迭代器相当于非法操作内存,如果容器没有扩容的话,只有it=v.end()的迭代器失效,那怎么解决呢?只需要在每次在操作迭代器前重新给迭代器赋值。
2.容器容量变化造成的迭代器失效
void test2()
{vector<int> vv;for (int i = 0; i < 10; i++)vv.push_back(i);cout << "vv.size()=" << vv.size() << endl;cout << "vv.capacity()=" << vv.capacity() << endl;auto it = vv.begin();cout << "after shrink_to_fit()" << endl;vv.shrink_to_fit();cout << "vv.size()=" << vv.size() << endl;cout << "vv.capacity()=" << vv.capacity() << endl;cout << *it << endl;
}3.被擦除的元素及之后的所有元素失效,包括end()
4. 被擦除元素及end()
void test3()
{vector<int> vv;for (int i = 0; i < 10; i++)vv.push_back(i);auto it = vv.end();cout << "after pop_back()" << endl;vv.pop_back();cout << *it << endl;
}
相关文章:
C++之迭代器
迭代器C中,迭代器就是类似于指针的对象,但比指针的功能更丰富,它提供了对对象的间接访问,每个迭代器对象代表容器中一个确定的地址。举个例子:void test() {vector<int> vv{1,2,3,4,5};for(vector<int>::i…...
2023-02-16:干活小计
数学公式表示学习: 大约耗时:2 hours 在做了一些工作后重读论文:MathBERT: A Pre-Trained Model for Mathematical Formula Understanding 这是本篇论文最重要的idea:Current pre-trained models neglect the structural featu…...
Linux上安装LaTeX
Linux上安装LaTeX1. 安装1.1 下载安装texlive1.2 配置中文1.3 安装XeLatex1.4 安装编辑器1.5 设置默认支持中文编译1.6 配置环境路径2. latex配置2.1 latex自动安装宏包2.2 latex手动安装宏包2.2.1. 查找包2.2.2. 生成.sty文件2.2.3. 复制到配置文件夹3. 更新包3. 卸载参考链接…...
webpack -- 无法将“webpack”项识别为 cmdlet
webpack : 无法将“webpack”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 1.检测是否是版本太高而只能使用脚手架进行打包 webpack4.x的打包已经不能用webpack 文件a …...
对齐与非对齐访问
对齐与非对齐访问 什么是非对齐访问 在机器指令层面,当尝试从不能被 N 整除 (addr % N ! 0) 的起始地址读取 N 字节的数据时即发生了非对齐内存访问。举例而言,从地址 0x10004 读取 4 字节是可以的,然而从地址 0x10005 读取 4 字节数据将会…...
基于感知动作循环的层次推理用于视觉问答
title:Hierarchical Reasoning Based on Perception Action Cycle for Visual Question Answering 基于感知动作循环的层次推理用于视觉问答 文章目录title:[Hierarchical Reasoning Based on Perception Action Cycle for Visual Question Answering](…...
python中的.nc文件处理 | 05 NetCDF数据的进一步分析
NetCDF数据的进一步分析 比较不同数据集、不同季节的气候数据 import os import numpy as np import pandas as pd import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature import seaborn as sns import geopandas as gpd import…...
GGX发布全新路线图,揭示具备 Layer0 特性且可编程的跨链基建生态
据彭博社报道,具备跨链通信且可编程的 Layer0 基础设施协议 Golden Gate (GGX) 已进行了 两年的线下开发,于近日公开发布了最新的路线图,该路线图不仅显示了该生态在过去两年的发展历程,也披露了 2023 年即将实现的重要里程碑。 G…...
taro+vue3 搭建一套框架,适用于微信小程序和H5
这里写tarovue3 搭建一套框架,适用于微信小程序和H5TaroVue3 搭建适用于微信小程序和 H5 的框架的大致步骤:TaroVue3 搭建适用于微信小程序和 H5 的框架的大致步骤: 安装 Taro。可以在终端输入以下命令进行安装: npm install -g…...
C++:模板初阶(泛型编程、函数模板、类模板)
文章目录1 泛型编程2 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则3 类模板3.1 类模板的定义格式3.2 类模板的实例化1 泛型编程 所谓泛型,也就是通用型的意思。 在以往编写代码时,我们常常…...
把数组排成最小的数 AcWing(JAVA)
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 例如输入数组 [3,32,321][3,32,321],则打印出这 33 个数字能排成的最小数字 321323321323。 数据范围 数组长度 [0,500][0,500]。 样例&#x…...
4.3 PBR
1. 实验目的 熟悉PBR的应用场景掌握PBR的配置方法2. 实验拓扑 PBR实验拓扑如图4-8所示: 图4-8:PBR 3. 实验步骤 (1) IP地址的配置 R1的配置 <Huawei>system-view...
hmac — 加密消息签名和验证
hmac — 加密消息签名和验证 1.概述 它的全称叫做Hash-based Message Authentication Code: 哈希消息认证码,从名字中就可以看出来这个hmac基于哈希函数的,并且还得提供一个秘钥key,它的作用就是用来保证消息的完整性,不可篡改。…...
AWS攻略——使用ACL限制访问
文章目录确定出口IP修改ACL修改主网络ACL修改入站规则修改子网ACL创建子网ACL新增入站规则新增出站规则关联子网假如我们希望限制只有公司内部的IP可以SSH登录到EC2,则可以考虑使用ACL来实现。 我们延续使用《AWS攻略——创建VPC》的案例,在它的基础上做…...
【已解决】关于 luckysheet 设置纯文本,解决日期格式回显错误的办法
目录 一、现象 二、分析 三、思考过程 五、解决 六、参考链接 一、现象 在excel里面输入内容,如 2023-2-17 12:00 保存后,传回后端的数据被转化成了 数值类型,这显然是一种困扰。 如图所示 二、分析 查阅了文档和一些博客发现 Lucky…...
Jackson
first you need to add dependence: gradle: implementation com.fasterxml.jackson.core:jackson-databind:2.13.1 implementation com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.1原生Jackson的使用示例: /*** 原生Jackson的使用示例*/ public class Jacks…...
字节软件测试岗:惨不忍睹的三面,幸好做足了准备,月薪19k,已拿offer
我今年25岁,专业是电子信息工程本科,19年年末的时候去面试,统一投了测试的岗位,软件硬件都有,那时候面试的两家公司都是做培训的,当初没啥钱,他们以面试为谎言再推荐去培训这点让我特别难受。后…...
vue使用axios发送post请求携带json body参数,后端使用@RequestBody进行接收
前言 最近在做自己项目中,做一个非常简单的新增用户场景,但是使用原生axios发送post请求的时候,还是踩了不少坑的。 唉,说多了都是泪,小小一个新增业务,在自己前后端一起开发的时候,硬是搞了好…...
【python百炼成魔】python之列表详解
文章目录一. 列表的概念1.1 列表是什么?1.2 为什么要使用列表?1.3 列表的定义二. 列表的增删改查操作2.1 列表的读取2.2 列表的切片2.3 列表的查询操作2.3.1 not in ,in 表达式2.3.2 列表元素遍历2.4 列表元素的增加操作2.4.1 append()的相关用法2.4.2 e…...
如何学习 Web3
在本文中,我将总结您可以采取的步骤来学习 Web3。从哪儿开始?当我们想要开始新事物时,我们需要一些指导,以免在一开始就卡住。但我们都是不同的,我们有不同的学习方式。这篇文章基于我学习 Web3 的非常个人的经验。路线…...
避坑指南:用Qt为STM32项目写上位机时,我遇到的5个串口和界面难题
避坑指南:用Qt为STM32项目写上位机时,我遇到的5个串口和界面难题 第一次用Qt给STM32开发上位机时,我以为串口通信不过是简单的数据收发,界面设计拖拖控件就能搞定。直到项目进度被各种诡异bug拖慢两周后,才意识到自己踩…...
普遍认为赠送福利越多客户留存越高,编程统计福利投入,客户留存数据过度福利,会造成客户贪婪流失率上升。
“福利投入强度与客户留存的非线性关系分析” 为主题。一、实际应用场景描述(Business Context)在 SaaS、电商、会员制平台、在线教育等商业场景中,赠送福利(优惠券、积分、试用权益、赠品等)被广泛用于:- …...
5分钟搞定Mac Boot Camp驱动:告别繁琐手动安装的智能工具
5分钟搞定Mac Boot Camp驱动:告别繁琐手动安装的智能工具 【免费下载链接】brigadier Fetch and install Boot Camp ESDs with ease. 项目地址: https://gitcode.com/gh_mirrors/bri/brigadier 还在为Mac电脑安装Windows驱动而头疼吗?Brigadier是…...
从习题到实战:掌握随机变量及其分布的5个核心场景
1. 从杯子分球看离散型随机变量 想象你面前有4个空杯子和3个乒乓球,随手把球扔进杯子里会发生什么?这个看似简单的游戏,其实是理解离散型随机变量的绝佳案例。X代表"杯子中球的最大个数",它可能取值为1、2、3——这就是…...
从UHS-II到DDR4:2014年存储技术演进与工程实践启示
1. 项目概述:一次2014年秋的存储技术快照九月的风刚带起一丝凉意,存储半导体领域却热闹非凡。作为一名长期跟踪硬件发展的从业者,我习惯定期梳理行业动态,而2014年9月这份来自EE Times的“Memory Product Round Up”产品汇总&…...
如何在Windows电脑上轻松安装安卓应用:5步完成轻量级跨平台部署
如何在Windows电脑上轻松安装安卓应用:5步完成轻量级跨平台部署 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否想在Windows电脑上运行安卓应用&…...
别再花钱买板卡了!手把手教你用NI-MAX虚拟PCI6224玩转LabVIEW数字IO
零成本玩转LabVIEW数字IO:NI-MAX虚拟设备全攻略 在工程教育与原型开发领域,硬件成本往往是阻碍学习进程的第一道门槛。一块标准的NI PCI-6224数字IO板卡市场价超过万元,而学生和独立开发者可能需要反复实验数十次才能掌握基础操作。但鲜为人知…...
终极哔咔漫画下载器:3步打造个人离线漫画图书馆
终极哔咔漫画下载器:3步打造个人离线漫画图书馆 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器,带图形界面 带收藏夹,已打包exe 下载速度飞快 项目地址: https://gitcode.com/gh_mirror…...
训练稳定性技巧:Loss spike 的根因与症状压制
⚙️ 工程深度:L4 生产级 | 📖 预计阅读:28 分钟 一句话理解: 梯度裁剪是退烧药,Warmup 重启是疫苗——只吃退烧药,烧还会反复。 🎯 本文产出 Loss spike 根因诊断决策树(可直接用于排障,含 5 个判断节点) 梯度裁剪 + 学习率 Warmup 重启的生产级 PyTorch 实现(…...
开源硬件测试框架OpenClaw Harness:从GPIO到CI/CD的自动化测试实践
1. 项目概述:一个开源硬件测试框架的诞生最近在折腾一些嵌入式开发和硬件原型项目,发现一个挺普遍的问题:当你手头有一堆传感器、执行器或者自己设计的电路板时,怎么高效、可靠地对它们进行功能测试和性能验证?用万用表…...
