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

C++ 如何快速实现一个容器的迭代器 从定义不难看出,迭代器是一个泛化的指针。 阅读详情
#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 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)
{
    cout << FANXIAN << YELLOW << "----------------------------------------begin--------------------------------------------" << NONE << endl;
    typename iterator_traits<T>::iterator_category cagy; // 用萃取机获取T迭代器类型的种类
    cout << RED << str << " : " << NONE;
    _display_category(cagy); //编译器挑选一个最适合的参数的重载_display_category
    cout << 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";

    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迭代器如何使用 迭代器是一种检查容器内元素并遍历元素的数据类型。 阅读详情

相关推荐

C++ STL容器迭代器失效

迭代器是封装了指针、重载了 -> 、* 、++等操作符的类模板。迭代器失效,指迭代器指向错误的元素或无效的内存地址。理解迭代器失效,首先要了解容器的内部数据结构、以及该容器存储新元素和删除旧元素时的内存状态。

Hyman's Blog 3065

c++ 迭代器种类,查看相应的容器的迭代器类型

标准库当中的5种迭代器类型 // ITERATOR STUFF (from <iterator>) // ITERATOR TAGS (from <iterator>) struct input_iterator_tag {}; struct output_iterator_tag {}; struct forward_iterator_tag : input_iterator_tag {}; struct bidirectional_iterator_tag : forwar

qq_38158479的博客 1498

C++ STL各容器迭代器种类及使用原因总结

在C++标准库的所有容器中,STL提供了几种不同种类的迭代器,每一个容器都可以用迭代器来遍历,但是不同容器的内部数据结构是不一样的,所以实际为了保证最高的迭代效率,STL针对不同容器提供的迭代器是不一样的,具体有以下几种: random_access_iterator(随机访问迭代器,可以通过直接偏移量访问(比如it+5即可访问it的后面第五个元素)) bidirectional_iterator(双向迭代器,可以通过++ --操作访问前后元素) forward_iterator(单向迭代器,可以通过++访

Basic的个人博客 1914

C++ 学习之list容器数据的存取(判断迭代器类型小技巧)

1、函数原型: front(); //返回第一个元素。 back(); //返回最后一个元素。 cout << L.at(0) << endl;// 错误 list不支持at访问数据 cout << L[0] << endl;//错误 list不支持[]方式访问数据 #include<iostream> #include<string> #include<list> using nam

阿乐的博客 602

RDMA网络通信技术、NCCL集合通讯(GPU)

NCCL 是 NVIDIA 专为 GPU 设计的高性能集合通信库,用于优化多 GPU、多节点间的集体操作(如 AllReduce、Broadcast、AllGather 等),是深度学习分布式训练的核心组件。RDMA 允许计算机直接访问远程内存,无需 CPU 干预,大幅降低了网络通信的延迟和 CPU 开销。常见的 RDMA 实现包括。是两项关键技术,用于优化节点间数据传输效率和大规模并行计算性能。在高性能计算(HPC)、人工智能训练和数据密集型场景中,

weixin_42795092的博客 2422

大语言模型在建筑规范自动化合规审查中的微调策略与规模效应实践

大语言模型(LLM)通过在海量文本数据上预训练,具备了强大的语言理解和生成能力。其核心原理是基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。在工程实践中,为了将这种通用能力适配到建筑、法律、金融等高度专业化的垂直领域,通常需要采用领域微调技术。微调通过使用特定领域的高质量指令数据对模型参数进行更新,使其掌握专业术语、逻辑规则和任务范式,从而解决通用模型在专业场景下知识匮乏和“幻觉”问题。结合检索增强生成(RAG)技术,将动态外部知识库作为模型的“参考手册”,能进一步提升事实准确性并降低幻

weixin_30667831的博客 364

C++STL迭代器识别相应对象的类型

在算法中运用迭代器时,可能会用到其相应类型(associative type),即迭代器所指向对象的类别。但C++只支持sizeof(),并不存在typeof()之说(即使运用RTTI性质中的typeid()获得的也只是类型名称不能用来做变量声明之用)。 为解决此问题,可以利用函数模板(function template)的参数推导(argument deduction)机制: template <class I, class T> void fun_impl(I iter, T t){

sinat_31608641的博客 972

多模态模型评测神器 | OpenCompass MMBench 了解一下!

MMBench 是 OpenCompass 研究团队自建的视觉语言模型评测数据集,可实现从感知到认知能力逐级细分评估。研究团队从互联网公开信息与权威基准数据集采集约 3000 道单项选择题 ,覆盖目标检测、文字识别、动作识别、图像理解、关系推理等 20 个细粒度评估维度。

OpenCompass的博客 7826

C++begin和end运算符的返回迭代器的类型如何判断

begin和end返回的具体类型应该由对象是否是常量进行确定,如果对象是常量,则这两个函数返回const_iterator; 如果对象不是常量,则这个函数返回iterator类型。下面利用一个超级简单的小程序进行验证二者的类型,源代码如下: #include #include using namespace std; int main() { vector ivec;

yangyongUestc的博客 2749

AgentVerse实战:构建多智能体协作系统的关键技术与应用场景

本文深入探讨了AgentVerse框架在构建多智能体协作系统中的关键技术及应用场景。通过分析智能体通信协议、环境交互机制和任务分解算法,展示了如何利用大型语言模型(LLM)实现智能体间的专业化分工与动态协作。文章还提供了智能软件开发团队和智能客服系统等典型应用案例,以及部署优化实践,为开发者构建高效的多智能体系统提供实用指导。

weixin_29254029的博客 361

从涡流求解器到瞬态场:Maxwell 3D里无线充电仿真,选对求解器能省一半计算时间

本文深入探讨了Maxwell 3D在无线充电仿真中涡流求解器与瞬态求解器的选择策略,帮助工程师优化计算效率与精度。通过对比分析两种求解器的适用场景、性能差异及实战技巧,揭示如何根据频率特性、材料非线性和动态过程需求做出精准选择,可节省高达50%的计算时间。特别针对3D线圈模型的无线充电系统设计提供了专业建议。

weixin_26861329的博客 232

C++五种类型的迭代器

迭代器定义了常用的操作集,但有些迭代器具有比其他迭代器更强大的功能。例如ostream_iterator只支持自曾、解引用和复制运算,而vector容器提供的迭代器除了这些运算,还支持自减、关系和算数运算。因此,迭代器可根据所提供的操作集进行分类。类似地,还可根据算法要求它的迭代器提供什么类型的操作,对算法分类。有一些算法,例如 find,只要求迭代器提供读取所指向内容和自增的功能。另一些算法,,

ZoMoe's eye 8998

基于反事实的因果推理Causal inference based on counterfactuals--一万六千字文献详细解读(因果关系的推理应用)【全文总结】

基于反事实的因果推理Causal inference based on counterfactuals--一万六千字文献详细解读(因果关系的推理应用)【全文总结】---来自一位即将入学的准研一,也希望这篇文章能够激励自己不断走下去!!

qq_46044325的博客 4442

关于以string类型的容器,容器中字符串的操作

最近总是遇到string类型的操作,今天把我掌握的方法都先记录下来。直接进主题吧! 常常用到Vector  ,list ,如何遍历里面的类型呢,看过STL的朋友,都会用迭代器。如下: //同一都支持迭代器操作,这里只讲一个关于string操作 vector strVec; strVec.push_back("this is a test!"); strVec.push_back("T

思想的可见性 1944

深度学习实战12(进阶版)-利用Dewarp实现文本扭曲矫正

大家好,我是微学A1, 我们在生活中会看到一些拍摄扭曲的图片,我们在通过OCR识别的时候,因为扭曲的厉害,而无法识别,我们需要对图片进行处理。

微学AI的博客 3157

YOLOv8剪枝 l1剪枝测试精度仅掉0.8个点,速度提高10.7fps!

文章摘要: 本文提出了一种基于组归一化的重要性评分方法GroupNormImportance,用于神经网络剪枝中的通道选择。该方法支持多种变体,包括标准L1范数、组L1范数和BN缩放因子等计算方式。核心实现包括三个关键部分:1)支持p范数计算(默认为L2);2)提供7种组重要性归约方法(如均值、最大值等);3)提供8种归一化方案(包括标准化、高斯化、LAMP等)。该方法输入一个剪枝组,输出各通道的重要性分数,通过依赖图可实现结构化剪枝。实验对比图展示了剪枝前后的效果差异,验证了该方法的有效性。

FJN110的博客 397

C++ [STL容器反向迭代器]

我们知道STL大部分容器都有迭代器,迭代器又分为正向迭代器和反向迭代器,对于正向迭代器以及实现前面我们已经了解了不少,而反向迭代器的设计思想是适配器模式,本节我们介绍反向迭代器的实现!本节简单介绍了反向迭代器思想,将类和对象的封装意义体现的淋漓尽致,快来学习吧!

ARMCSKGT的博客 6501

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++迭代器(iterator)

什么是迭代器 迭代器是一种可以遍历容器元素的数据类型。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。C++更趋向于使用迭代器而不是数组下标操作,因为标准库为每一种标准容器(如vector、map和list等)定义了一种迭代器类型,而只有少数容器(如vector)支持数组下标操作访问容器元素。可以通过迭代器指向你想访问容器的元素地址,通过*x打印出元素值。这和我们所熟知的指针极其类似。 C语言有指针,指针用起来十分灵活高效。 C++语言有迭代器,迭代器相对于指针而言功能更为丰富。 vector,是数

weixin_47700137的博客 5万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C++】STL常用容器总结之一:容器与迭代器

声明: 1、本博文主要整理自《C++ Primer》和《STL源码剖析》这两本经典书籍。同时,也参考了网络中不少优秀博客,对这些博客的作者表示感谢。 2、由于博主能力有限,对于一些容器的用法可能尚未进行深入研究。因此,本博文若有错误和不足之处,欢迎大家批评指正。 3、本博文仅作学术交流只用,无任何其他用途。言归正传,下面开始介绍C++中的STL容器。1、容器的概念 Standard Temp

长相忆兮长相忆的专栏 9929

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++ 迭代器详解(1):迭代器基础及类型

在学习 C++ 迭代器的基础时,首先要了解迭代器的概念、基本语法,以及最基础的操作。是一个抽象的对象,类似指针,它提供了一种统一的方式来遍历和操作容器中的元素。每种容器都有对应的迭代器类型,可以通过容器的成员函数 和 获得。使用迭代器可以与不同类型的容器(如 vector、list、set 等)进行交互,而不需要了解容器的内部实现细节。示例代码: 在这个例子中, 是一个 类型的迭代器,用来遍历 容器。 解引用操作符,用于访问迭代器当前指向的元素。迭代器提供了一些基本操作,这些操作能够灵活地访问容器的

weixin_69480212的博客 2365

C++中STL之容器和迭代器

各种数据结构,如Vector,List,Deque,Set,Map,用来存放数据,STL容器是一种Class Template,就体积而言,这一部分很像冰山载海面的比率。扮演容器与算法之间的胶合剂,是所谓的“泛型指针”,共有五种类型,以及其它衍生变化,从实现的角度来看,迭代器是一种将:Operators*,Operator->,Operator++,Operator--等相关操作予以重载的ClassTemplate(模板类)。所有STL容器都附带有自己专属的迭代器。

weixin_50615869的博客 2281

C++之迭代器

迭代器(Iterator)是按照一定的顺序对一个或多个容器中的元素从前往遍历的一种机制,比如for循环就是一种最简单的迭代器,对一个数组的遍历也是一种的迭代遍历的过程。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器有时也称为枚举器(Enumerator),其结构图如下:迭代器结构图迭代器其实就是维护一个当前的指针,这个指针可以指向当前的元素,可以返回当前所指向的元素,可以移到下一个元素的位置,通过这个指针可以遍历容器的所有元素。

阳光日志 4898

C++ ,Vector容器,迭代器

1.迭代器的概念 :要,需要通过“迭代器(iterator)”进行。迭代器是一个,相当于。。从这一点上看,迭代器和指针类似。不多说下面是基本用法测试 :还有一点要强调的是,迭代器有正向迭代器,也有反向迭代器。迭代器按照定义方式分成以下四种。2) 常量正向迭代器,定义方法如下:容器类名::const_iterator 迭代器名;3) 反向迭代器,定义方法如下:容器类名::reverse_iterator 迭代器名;

qq_40358853的博客 2239

[C++] 迭代器

对迭代器的介绍

A_ns_wer_的博客 7415

【C++】vector与迭代器的使用

【C++】vector与迭代器的使用

qq_44671773的博客 5281

【C++】初谈迭代器

迭代器是一种可以访问和遍历容器中元素的对象,它类似于指针,但是具有更多的功能和灵活性。本文将介绍C++迭代器的基本概念、分类、用法和注意事项。

心之王者的博客 2319
上一篇: 【C++】C++ Primer-第五版-10.5 泛型算法结构
下一篇: C++的异常处理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值