【C++】泛型算法(二)泛型指针Iterator(迭代器)

迭代器iterator定义

  • 迭代器是一种检查容器内元素并遍历元素的数据类型;
  • 迭代器提供一个对容器对象或者string对象的访问方法,并定义了容器范围;
  • 迭代器的使用可以提高编程的效率。

其定义应该提供:

  1. 迭代对象(某个容器)的类型,用来决定如何访问下一个元素;

  2. iterator所指的元素类型,决定iterator提领操作的返回值;

区别迭代器iterator和指针pointer

  1. 指针可以用来遍历存储空间连续的数据结构,但对于存储空间非连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历;
  2. 迭代器是指针的泛化,它允许程序员用相同的方式处理不同的数据结构(容器)。
//每种容器类型都定义了自己的迭代器类型,用于访问容器内的元素
//定义方法:容器类名::iterator 迭代器名vector<string>::iterator iter = svec.begin();//iter被定义为一个iterator,指向一个vector
//元素类型是string,初值指向svec的第一个元素。 

常用迭代器类型

常用的迭代器类型

  • 如上图所示,迭代器类型主要支持两类,随机访问和双向访问:
    其中vector和deque支持随机访问,list,set,map等支持双向访问。
  1. 随机访问:提供了对数组元素进行快速随机访问以及在序列尾部进行快速插入和删除操作。
  2. 双向访问:插入和删除所花费的时间是固定的,与位置无关。

参考:C++迭代器(Iterator)详解

使用示例

vector

#include <iostream>
#include <vector>using namespace std;int main(int argc, char* argv[])
{vector<int> vecTemp;for (int i = 0; i<6; i++){vecTemp.push_back(i);}cout <<"Original deque: ";    vector<int>::iterator it;for (it = vecTemp.begin(); it!=vecTemp.end(); it++){cout <<*it <<" ";}return 0;
}/*
输出结果:
Original deque: 0 1 2 3 4 5
*/

deque

#include <iostream>
#include <deque>using namespace std;int main(int argc, char* argv[])
{deque<int> dequeTemp;for (int i = 0; i<6; i++){dequeTemp.push_back(i);}cout <<"Original deque: ";deque<int>::iterator it;for (it = dequeTemp.begin(); it != dequeTemp.end(); it++){cout <<*it <<" ";}cout <<endl;return 0;
}/*
输出结果:
Original deque: 0 1 2 3 4 5
*/

list

#include <iostream>
#include <list>using namespace std;int main(int argc, char* argv[])
{list<int> listTemp;for (int i = 0; i<6; i++){listTemp.push_back(i);}cout << "Original list: ";list<int>::iterator it;for (it = listTemp.begin(); it != listTemp.end(); it++){cout << *it << " ";}cout << endl;list<int>::iterator itStart = listTemp.begin();listTemp.insert(itStart,5,9);cout << "Result of list: ";for (it = listTemp.begin(); it != listTemp.end(); it++){cout << *it << " ";}cout << endl;return 0;
}/*
输出结果:
Original list: 0 1 2 3 4 5
Result of list: 9 9 9 9 9 0 1 2 3 4 5
*/

set

#include <iostream>
#include <set>using namespace std;int main(int argc, char* argv[])
{set<char> setTemp;for (int i = 0; i<6; i++){setTemp.insert('F'-i);}cout <<"Original set: ";set<char>::iterator it;for (it = setTemp.begin(); it != setTemp.end(); it++){cout <<*it <<" ";}cout <<endl;return 0;
}/*
输出结果:
Original set: A B C D E F
*/

map

#include <iostream>
#include <map>using namespace std;typedef map<int, char> MyMap;int main(int argc, char* argv[])
{MyMap mapTemp;for (int i = 0; i<6; i++){mapTemp[i] = ('F'-i);}cout <<"Original map: " <<endl;MyMap::iterator it;for (it = mapTemp.begin(); it != mapTemp.end(); it++){cout << (*it).first << " --> ";cout << (*it).second << std::endl;}cout <<endl;return 0;
}/*
输出结果:
Original map:
0 --> F
1 --> E
2 --> D
3 --> C
4 --> B
5 --> A
*/

参考:C++ STL 迭代器(iterator)详解

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

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

相关文章

科技云报道:云安全的新战场上,如何打破“云威胁”的阴霾?

科技云报道原创。 近年来&#xff0c;在云计算和网络安全产业的蓬勃发展下&#xff0c;我国云安全行业市场规模呈现高速增长态势&#xff0c;在网络安全市场总体规模中占比不断上升。 据统计&#xff0c;近5年我国云安全市场保持高速增长&#xff0c;2021年我国云安全市场规模…

Linux(下)

一、 对netstat的补充 1.进程管理 在杀死进程时&#xff0c;不可以杀死其他用户的进程。 查看指定进程时&#xff0c;下图的第二行 是ps -ef | grep tail 命令执行的进程 kill -9 进程号 也可以写作 kill -s 9 进程号 机器人&#xff1a; 2.查看主机状态 2.1 top命令&…

uniapp——实现聊天室功能——技能提升

这里写目录标题 效果图聊天室功能代码——html部分代码——js部分代码——其他部分 首先声明一点&#xff1a;下面的内容是从一个uniapp的程序中摘录的&#xff0c;并非本人所写&#xff0c;先做记录&#xff0c;以免后续遇到相似需求抓耳挠腮。 效果图 聊天室功能 发送图片 …

【WFA】【Enhanced open】CT_OWE_DHgroup_STA_NoAssociation-AllGroupsRejected_10338_1

测试报告如下: Fail的关键log: 当连接到ap失败时,驱动程序将尝试连接到ap。如果ap仅支持Group 20,并且sta支持Group 19、20。sta将首先尝试Group 19,ap将通过状态代码77拒绝它。然后驱动程序将尝试连接Group 19的ap,仍然达到最大重试次数。那么sta将尝试第Group 20 。 …

Docker入门,Docker是什么?有什么用?该怎么用?

目录 1. 项目部署时的复杂性&#xff1f; 2. Docker是如何解决依赖兼容问题的&#xff1f; 3. 众多Linux操作系统发行版的区别 4. Docker 是如何实现跨系统运行的&#xff1f; 5. Docker与虚拟机的差别 6. 镜像(Image)与容器(Container) 7. DockerHub 8. Docker 架构 …

Matlab图像处理-强度分层法

强度分层法 强度分层技术是最简单的伪彩色图像处理方法之一。 如果将一幅图像被描述为空间坐标(x,y) 的强度函数f(x,y) &#xff0c;则分层的方法可以看作是将一些平面平行于图像坐标平面(x,y) &#xff0c;然后将每个平面在相交区域切割图像函数。下图展示了使用平面将图像函…

时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测

时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测。…

项目--苍穹外卖

1.| constant | 存放相关常量类 | | context | 存放上下文类 | | enumeration | 项目的枚举类存储 | | exception | 存放自定义异常类 | | json | 处理json转换的类 | | properties | 存放SpringBoot相关的配置属性类 | | result | 返回结果类的封装 | | utils | 常用工具类 | …

Linux工具(一)

前言&#xff1a;Linux是一个开源的操作系统&#xff0c;它拥有庞大而活跃的开发社区&#xff0c;为用户提供了丰富多样的工具和应用程序。这些工具不仅适用于系统管理员和开发人员&#xff0c;也适用于普通用户&#xff0c;可以帮助他们完成各种任务&#xff0c;从简单的文件管…

宝塔面板日志和缓存占用磁盘空间很大,如何清理?

服务器使用的宝塔面板&#xff0c;最近发现服务器的“系统盘”快爆满了&#xff0c;点面板上日志管理都要收费&#xff0c;我也不是很懂服务器的运维&#xff0c;使用ai进行询问&#xff0c;得到了解决&#xff1a; /var/log 日志目录 运行下面的命令查找是哪些目录占用空间很…

嵌入式Linux驱动开发(I2C专题)(七)

使用GPIO操作I2C设备_IMX6ULL 参考资料&#xff1a; Linux文档 Linux-5.4\Documentation\devicetree\bindings\i2c\i2c-gpio.yamlLinux-4.9.88\Documentation\devicetree\bindings\i2c\i2c-gpio.txt Linux驱动源码 Linux-5.4\drivers\i2c\busses\i2c-gpio.cLinux-4.9.88\driv…

【SpringMVC】文件上传与下载、JREBEL使用

目录 一、引言 二、文件的上传 1、单文件上传 1.1、数据表准备 1.2、添加依赖 1.3、配置文件 1.4、编写表单 1.5、编写controller层 2、多文件上传 2.1、编写form表单 2.2、编写controller层 2.3、测试 三、文件下载 四、JREBEL使用 1、下载注册 2、离线设置 一…

Java增强for循环(学习笔记)

Java增强for循环 主要用于数组或者集合的增强型for循环。 格式&#xff1a; for(声明语句&#xff1a;表达式){ 代码句子 } 声明语句&#xff1a;声明新的局部变量&#xff0c;该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块&#xff0c;其值与此时数组元…

Python 变量作用域

视频版教程 Python3零基础7天入门实战视频教程 在程序中定义一个变量时&#xff0c;这个变量是有作用范围的&#xff0c;变量的作用范围被称为它的作用域。根据定义变量的位置&#xff0c;变量分为两种。 局部变量。在函数中定义的变量&#xff0c;包括参数&#xff0c;都被称…

王道考研操作系统

王道考研操作系统 计算机系统概述操作系统的概念操作系统的特征操作系统的发展历程操作系统内核中断和异常![在这里插入图片描述](https://img-blog.csdnimg.cn/162452b4c60144e0bd500e180127c447.png)系统调用操作系统结构虚拟机错题 进程与线程进程控制进程通信线程和多线程模…

jvm中对象创建、内存布局以及访问定位

对象创建 Java语言层面&#xff0c;创建对象通常&#xff08;例外&#xff1a;复制、反序列化&#xff09;仅仅是一个new关键字即可&#xff0c;而在虚拟机中&#xff0c;对象&#xff08;限于普通Java对象&#xff0c;不包括数组和Class对象等&#xff09;的创建又是怎样一个过…

【直播预约中】 腾讯大数据 x StarRocks|构建新一代实时湖仓

随着信息时代的兴起&#xff0c;数据已成为推动业务决策和创新的核心要素&#xff1b;结构化、半结构化等多种类型的数据呈现爆炸式增长&#xff0c;如何高效处理和分析海量数据已经成为关键挑战&#xff0c;结合传统数仓与数据湖优势的湖仓一体&#xff08;Lakehouse&#xff…

解决WSL2占用内存过多问题(Docker on WSL2: VmmemWSL)

解决WSL2占用内存过多问题&#xff08;Docker on WSL2: VmmemWSL&#xff09; 一、问题描述二、问题解决2.1 创建.wslconfig文件2.2 重启wsl2 一、问题描述 安装完WSL2后&#xff0c;又安装了Docker&#xff0c;使用了一段时间&#xff0c;发现电脑变卡&#xff0c;进一步查看…

【VUE异常】el-popconfirm失效,@confirm事件不生效,点击没有任何反应,刷新页面才能点击

el-popconfirm失效&#xff0c;confirm事件不生效&#xff0c;点击没有任何反应&#xff0c;刷新页面才能点击 一、背景描述二、原因分析三、解决方案3.1 方案一&#xff1a;使用onConfirm3.2 方案二&#xff1a;confirm与onConfirm同时使用3.3 方案三&#xff1a;el-popconfir…

【用unity实现100个游戏之12】unity制作一个俯视角2DRPG《类星露谷物语》资源收集游戏demo

文章目录 前言加快编辑器运行速度素材(1)场景人物(2)工具 一、人物移动和动画切换二、走路灰尘粒子效果探究实现 三、树木排序设计方法一方法二 四、绘制拿工具的角色动画五、砍树实现六、存储拾取物品引入Unity 的可序列化字典类 七、实现靠近收获物品自动吸附八、树木被砍掉的…