110 C++ STL 迭代器的概念和分类

一。迭代器基本概念

迭代器是一个 “可以遍历STL容器全部或者部分元素”的对象。

这个对象类似于指针的作用。

迭代器用来表现容器中的某一个位置。

迭代器紧密依赖于容器,迭代器是由容器来提供的,也就是说:一般来说,是容器里面定义这迭代器的具体类型细节。

可以劣迹为迭代器和容器紧密相关。

*iter :可以将迭代器所指向容器中的元素内容。

不同的容器所使用的迭代器是不同的。

例子:

二。迭代器的分类

分类的依据:迭代器的移动特性以及在这个迭代器上能够做的操作

例如list 是可以前后移动的,forward_list就只能往一边移动。

vector是可以通过 iter+3,这样的操作,但是 list就不能,

这些迭代器实际上是有继承关系的。

都是struct

并不是所有的容器都有迭代器,例如stack 和 queue

这个也是可以想象的,stack的栈,先进后出,因此只能从栈顶取得元素,要迭代器有啥用?

queue 是队列,先进先出,只能从给队尾插入元素,从对头出,要迭代器有啥用?

可以通过代码正在运行的容器用的是啥类型的迭代器

参考这哥们的代码

【C++】查看各种容器使用的迭代器是什么类型的_c++查看迭代器类型-CSDN博客

#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>
#include <memory>
#include <set>
#include <map>
#include <list>
#include <array>
#include <unordered_map>
#include <unordered_set>
#include <deque>
#include <forward_list>using namespace std;
//如下这段define 是让在cmd上运行的东西 显示特效,可以忽略
#define NONE "\033[m"
#define RED "\033[0;32;31m"
#define LIGHT_RED "\033[1;31m"
#define GREEN "\033[0;32;32m"
#define LIGHT_GREEN "\033[1;32m"
#define BLUE "\033[0;32;34m"
#define LIGHT_BLUE "\033[1;34m"
#define DARY_GRAY "\033[1;30m"
#define CYAN "\033[0;36m"
#define LIGHT_CYAN "\033[1;36m"
#define PURPLE "\033[0;35m"
#define LIGHT_PURPLE "\033[1;35m"
#define BROWN "\033[0;33m"
#define YELLOW "\033[1;33m"
#define LIGHT_GRAY "\033[0;37m"
#define WHITE "\033[1;37m"
#define SHINE "\033[5m"      //闪烁
#define DASH "\033[9m"       // 中间一道横线
#define QUICKSHINE "\033[6m" //快闪
#define FANXIAN "\033[7m"    //反显
#define XIAOYIN "\033[8m"    // 消隐,消失隐藏// 验证迭代器所属种类
void _display_category(random_access_iterator_tag mytag)
{cout << "random_access_iterator_tag" << endl;
}void _display_category(bidirectional_iterator_tag mytag)
{cout << "bidirectional_iterator_tag" << endl;
}void _display_category(forward_iterator_tag mytag)
{cout << "forward_iterator_tag" << endl;
}void _display_category(output_iterator_tag mytag)
{cout << "output_iterator_tag" << endl;
}void _display_category(input_iterator_tag mytag)
{cout << "input_iterator_tag" << endl;
}template <typename T>
void display_category(string &str, T ite)
{//这里使用的是 萃取机,萃取机可以获取迭代器的种类。typename iterator_traits<T>::iterator_category cagy; // 用萃取机获取T迭代器类型的种类cout << RED << str << " : " << NONE; //这就是cdm上使用特效的代码_display_category(cagy); //编译器挑选一个最适合的参数的重载_display_categorycout << RED << str << " : " << NONE << "typeid(ite).name() = " << typeid(ite).name() << endl;//cout << "\033[1;35m---------------end-------------------\033[m" << endl;cout<< XIAOYIN << YELLOW << "----------------------------------------end-----------------------------------------------" << NONE << endl<< endl<< endl;
};int main(void)
{string arrayName = "array";string vectorName = "vector";string listName = "list";string forward_listName = "forward_list";string dequeName = "deque";string setName = "set";string mapName = "map";string multimapName = "multimap";string multisetName = "multiset";string unordered_setName = "unordered_set";string unordered_mapName = "unordered_map";string unordered_multisetName = "unordered_multiset";string unordered_multimapName = "unordered_multimap";//array<int, 100>::iterator 是一种类型,后面加上(),代表的是为这中类型产生一个临时对象display_category(arrayName, array<int, 100>::iterator()); //这种类型():代表产生 一个临时对象display_category(vectorName, vector<int>::iterator());display_category(listName, list<int>::iterator());display_category(forward_listName, forward_list<int>::iterator());display_category(dequeName, deque<int>::iterator());display_category(setName, set<int>::iterator());display_category(mapName, map<int, int>::iterator());display_category(multimapName, multimap<int, int>::iterator());display_category(multisetName, multiset<int>::iterator());display_category(unordered_setName, unordered_set<int>::iterator());display_category(unordered_mapName, unordered_map<int, int>::iterator());display_category(unordered_multisetName, unordered_multiset<int>::iterator());display_category(unordered_multimapName, unordered_multimap<int, int>::iterator());return 0;
}

如下两张图来源于C++STL之迭代器(iterator)详解_c++迭代器-CSDN博客

三,各个种类的迭代器的能力。这里可以不研究,知道就行,后续用到的时候,可以对照这个

没有继承的这个先弄一下。

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

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

相关文章

Git的一些基本操作

初始git 我们给出下面的一个场景&#xff0c;在大学里&#xff0c;一些老师在我们做完实验之后喜欢让我们交实验报告&#xff0c;假设我们有一个比较追求完美的老师和一个勤奋的学生&#xff0c;这个学生叫做小帅&#xff0c;那天小帅桑勤奋的完成实验报告&#xff0c;在第二天…

[C/C++] -- JSON for Modern C++

JSON for Modern C&#xff08;nlohmann/json&#xff09;是一个流行的 C JSON 库&#xff0c;由德国开发者nlohmann编写。这个库提供了简洁而灵活的 API&#xff0c;使得在C中解析和生成JSON数据变得非常方便。 1.JSON简介 JSON&#xff08;JavaScript Object Notation&…

台灯学生用哪个牌子好?学生用护眼台灯品牌推荐

晚上学习&#xff0c;有台灯肯定比没台灯好。只要是盏合格的、能用的台灯&#xff0c;都能给你一个稳定又亮堂的环境。但是有些不合格的台灯会给眼睛带来伤害&#xff0c;尤其是学习负担比较重的学生。那有哪些台灯是学生用着比较好用的呢&#xff1f; 一、学生使用护眼台灯的…

图数据库neo4j入门

neo4j 一、安装二、简单操作<一>、创建<二>、查询<三>、关系<四>、修改<五>、删除 三、常见报错<一>、默认的数据库密码是neo4j,打开浏览器http://localhost:7474登录不上,报错: Neo.ClientError.Security.Unauthorized: The client is un…

#Z0463. 巡逻1

Description 在一个地区中有 n 个村庄&#xff0c;编号为 1, 2, ..., n。有 n – 1 条道路连接着这些村 庄&#xff0c;每条道路刚好连接两个村庄&#xff0c;从任何一个村庄&#xff0c;都可以通过这些道路到达其 他任一个村庄。每条道路的长度均为 1 个单位。 为保证该地区的…

如何使用Python + 百度翻译API 自动大批量免费翻译Excel文件中的外语内容

手里有一个Excel文件,包括了大量的亚马逊德语搜索词(关键词),每个单元格1个,需要翻译为中文。但是文件大小超过了10M,不能使用百度或Google免费的文档功能,如果手工一个个的翻译然后粘贴又太麻烦,于是想到用Python加免费翻译API完成。 一、openpyxl库 用Python编辑处…

Magnet AXIOM取证神器的安装使用方法及详细教程

Magnet AXIOM取证神器的安装使用方法及详细教程 公众号&#xff1a;鱼影安全1.Magnet AXIOM取证工具介绍&#xff1a;2.Magnet AXIOM取证工具安装&#xff1a;第一步&#xff1a;第二步&#xff1a; 3.Magnet AXIOM取证工具使用方法&#xff1a; 公众号&#xff1a;鱼影安全 关…

112.乐理基础-五线谱-五线谱的调号(一)

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;111.乐理基础-五线谱-五线谱的节奏型、打拍子-CSDN博客 首先需要掌握&#xff0c;下图中的所示的内容&#xff1a;内容可以在 乐理基础 这里找到&#xff0c;名字上带※符号的找不到 首先回顾七个白键触发的大调音…

香港的低价服务器:2024年稳定服务商推荐

对于用户而言&#xff1a;使用香港服务器无非是觉得免备案、或者业务是集中在日本或东南亚地区&#xff0c;无论是哪些因素驱使&#xff0c;其实用户想要的就是一个低价稳定&#xff01;如果服务器都连不上&#xff0c;再便宜又有什么用处。 所以先给各位用户提个醒&#xff0…

day28打卡

day28打卡 93. 复原 IP 地址 见注释 class Solution { public:vector<string> ret;vector<string> restoreIpAddresses(string s) {string ip;dfs(s, 0, ip);return ret;}//n记录小数点个数void dfs(string s, int n, string ip){//n为4if(n 4){//如果字符s没有…

力扣精选算法100道——和为 K 的子数组[前缀和专题]

和为K的子数组链接 目录 第一步&#xff1a;了解题意​编辑 第二步&#xff1a;算法原理 第三步&#xff1a;代码 第一步&#xff1a;了解题意 数组中和为k的连续子数组&#xff0c;我们主要关注的是连续的&#xff0c; 比如[1,1,1],和为2的子数组有俩个&#xff0c;比如第…

HDL Designer 2021.1 如何将默认编辑器修改为VsCode

第1步 安装Vscode 第2步 添加Vscode至HDL Designer 第3步 更改HDL Designer编译器 第4步 修改结束&#xff0c;在HDL Designer中双击block可使用Vscode编辑verilog

通过无线打通两个路由器

通过无线打通两个路由器 上网向导无线连接 配置比较简单&#xff0c;有些路由器支持有些不支持&#xff0c;支持的大致就是下面的方法&#xff0c;不过不同型号面板不一样&#xff0c;这里主要学习方法&#xff0c;所以不做路由器型号介绍。 重要的事情说三遍&#xff1a;学习要…

云端录制直播流视频,上传云盘

前言 哪一天我心血来潮&#xff0c;想把我儿子学校的摄像头视频流录制下来&#xff0c;并保存到云盘上&#xff0c;这样我就可以在有空的时候看看我儿子在学校干嘛。想到么就干&#xff0c;当时花了一些时间开发了一个后端服务&#xff0c;通过数据库配置录制参数&#xff0c;…

挑战杯 python+深度学习+opencv实现植物识别算法系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的植物识别算法研究与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;4分 &#x1f9ff; 更多…

93.网游逆向分析与插件开发-游戏窗口化助手-升级经验数据获取的逆向分析

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;显示游戏数据到小助手UI 码云地址&#xff08;游戏窗口化助手 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;852c339f5e4c103390b123e0eaed…

浅析现代计算机启动流程

文章目录 前言启动流程概述磁盘分区格式MBR磁盘GPT磁盘隐藏分区 传统BIOS引导传统BIOS启动流程 UEFI引导UEFI引导程序UEFI启动流程 引导加载程序启动操作系统相关参考 前言 现代计算机的启动是一个漫长的流程&#xff0c;这个流程中会涉及到各种硬件的配置与交互&#xff0c;包…

Python接口自动化测试框架运行原理及流程

这篇文章主要介绍了Python接口自动化测试框架运行原理及流程,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本文总结分享介绍接口测试框架开发&#xff0c;环境使用python3selenium3unittestddtrequests测试框…

【GAMES101】Lecture 17 材质

目录 材质 漫反射 镜面反射 折射-Snell’s Law Fresnel Reflection / Term&#xff08;菲涅耳项&#xff09; 微表面模型 各向同性与各向异性 BRDF的性质 测量BRDF 材质 渲染方程中的BRDF描述了物体是如何与光线作用的&#xff0c;而物体的材质决定了它看起来是怎么样…

【深度学习理论】持续更新

文章目录 1.统计学习理论 1.统计学习理论 统计学习理论&#xff0c;一款适合零成本搞深度学习的大冤种的方向 从人类学习到机器学习的对比&#xff08;学习的过程分为归纳和演绎 &#xff09;&#xff0c;引出泛化和过拟合的概念。 如何表示归纳的函数规律呢&#xff1f;以监督…