三 迭代器(三)迭代器适配器(Iterator adapters)

C++STL迭代器适配器之Reverse迭代器、Insert迭代器、Stream迭代器、Move迭代器 Reverse迭代器 Reverse迭代器重新定义了递增运算和递减运算,所有标准容器都允许使用Reverse迭代器来遍历元素。下面是一个例子: void Print(int elem) { cout << elem << ' '; } int main() { list<int> coll = { 1,2,3,4,5,6,7,8,9 }; for_each... 阅读详情

一 迭代器适配器(Iterator adapters)

迭代器是一个纯粹抽象概念:任何东西,只要行为类似迭代器,它就是一个迭代器。

C++标准程序库提供了数个预先定义的特殊迭代器,即所谓迭代器适配器,它不仅起辅助作用,还能赋予整个迭代器抽象概念更强大的能力。

使用时需包含<iterator>头文件。其中Insert iterators和Reverse iterators定义于<bits/stl_iterator.h>中,Stream iterators定义于<bits/stream_iterator.h>头文件中。

   三种迭代器适配器类型:

1. Insert iterators(安插型迭代器)

2. Stream iterators(流迭代器)

3. Reverse iterators(逆向迭代器)


二 Insert Iterators(安插型迭代器):

Insert Iterators:可以使算法以安插方式而非覆写方式运作。


(1)三种预先定义的Insert Iterators:



1. Back inserters:(安插于容器最尾端):

Back Inserters的内部调用push_back(),在容器的尾端插入元素。

只有在提供有push_back()成员函数的容器中,back_inserters才能派上用场。在C++标准程序库中,这样的容器有:vector,deque,list。


2. Front inserters(安插于容器的最前端):

Front inserters调用push_front(),将元素安插于容器最前端。

Front inserters只能用于提供有push_front()成员函数的容器,在标准程序库中,这样的容器有deque和list。


3. General inserters(一般性安插器):

将元素插入“初始化时第二参数”所指位置的前方。Inserters内部调用insert(),并以新值和新位置作为参数。

所有STL容器都提供有insert()成员函数,因此,这是唯一可用于关联容器身上的一种预定义的insert。

例子:


三 Stream Iterators(流迭代器)

Stream Iterator:一种用来读写stream(流)的迭代器;包括:istream_iterator和ostream_iterator。(使用时需要#include<iterator>)

如:

#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;
int main()
{
vector<string> vec;
copy(istream_iterator<string>(cin),//产生一个从"标准流cin"读取数据的stream iterator,元素透过一般的operator>>读取进来。
istream_iterator<string>(),//产生一个代表“流结束符号”(end of stream)的迭代器。
back_inserter(vec));
sort(vec.begin(),vec.end());
unique_copy(vec.begin(),vec.end(),
ostream_iterator<string>(cout,"\n"));//产生一个output stream iterator,通过operator<<向cout写入strings,第二个参数用来作为元素之间的分隔符。
}

四 Reverse Iterators(逆向迭代器)


生成方法:

1. 所有容器都可以通过成员函数rbegin()和rend()分别产生出reverse iterator,它们共同定义一个半开区间。

rbegin()传回逆向遍历的第一个元素,也就是实际上最后一个元素的位置。

rend()传回逆向遍历时最后一个元素的下一个位置,也就是实际上第一个元素的前一个位置。


2. 可以将一般迭代器转化为一个Reverse迭代器,原先的迭代器必须具有双向移动能力。

如:vector<int>::reverse_iterator rpos(pos)。


3. 以base()将逆向迭代器转回正常迭代器。

逆向迭代器提供了一个base()成员函数,将逆向迭代器转回正常的迭代器。

如:vector<int> rrpos=rpos.base()。





C++ STL和泛型编程(三)----适配器(Adapters) C++ STL和泛型编程(三)----适配器(Adapters)一、作用及类别二、Container Adapters三、Functor Adapters- binder2nd- not1- bind四、Iterator Adapters- reverse_iterator- inserter(注意不是insert)五、X adapters- ostream_iterator 一、作用及类别 Adapter是将某个已经存在的东西改造一下,如改下接口(两个参数的改为一个参数)或改下函数名称之类的。 在编程技术 阅读详情

相关推荐

C++ STL迭代器深度解析:从核心概念到自定义实现与实战应用

迭代器是泛型编程中的核心抽象概念,它提供了一种统一访问数据序列元素的方法,而不依赖于底层具体的数据结构(如数组、链表或树)。其工作原理是通过定义一组标准操作(如解引用、自增、比较)来封装对元素的访问和遍历逻辑,从而将算法与数据结构解耦。这种设计的技术价值在于实现了算法的高度复用性和数据结构的独立性,是编写高效、通用代码的基石。在C++ STL中,迭代器广泛应用于各种算法(如排序、查找、变换)和容器(如vector、list、map)的交互场景。本文以C++ STL迭代器为焦点,深入探讨其分类体系、特性萃取机

weixin_30613433的博客 439

迭代器和迭代器适配器---《C++标准程序库》读书笔记

迭代器是一个所谓的smart pointers。具有遍历复杂数据结构的能力,其下层运行机制取决于所遍历的数据结构。因此,每一种容器都必须提供自己的迭代器。事实上,每一种容器都将迭代器以嵌套的方式定义与内部,因此各种迭代器的接口相同,型别却不同。这直接导出了泛型程序设计的概念:所有操作行为都使用相同接口,虽然它们的型别不同。      迭代器还有一个非常纯粹的理念:任何东西,只要其行为类似迭代器,

WUDAIJUN的博客 4745

DSPF28335:从零到一,实战GPIO与外部中断的嵌入式系统交互设计

本文以德州仪器DSPF28335芯片为例,详细讲解了嵌入式系统中GPIO与外部中断(EXTI)的实战配置方法。通过一个完整的按键控制LED并触发ADC采样的项目,深入剖析了GPIO寄存器配置、三级中断机制(外设-PIE-CPU)以及中断服务函数编写的核心要点,帮助开发者掌握嵌入式交互设计的基石,并提供了关键的避坑指南与调试清单。

weixin_29169899的博客 115

C++学习29:迭代器深度探索之迭代器适配器

迭代器适配器

时间有泪 385

FineBI制作数据可视化大屏-数据连接(1)

快速上手大屏可视化,FineBI数据连接配置。

Pangaoyang_的博客 1912

Linux USB设备命名规则

有一个USB设备,接到了Linux系统的终端的某个插口上,那么怎么找到这个设备对应设备路径呢?这个USB设备虚拟了多个功能(三个串口和一个网卡), 如何找到对应操作路径呢?

weixin_43132521的博客 1697

迭代器适配器(iterator adapters)

前一节中我们讨论了主要的几个迭代器,但是那几个迭代器都是定义于STL中的标准容器,用法也只能针对标准容器,比较局限。在不断的演变中,STL的爱好者扩充了迭代器的内容,他们在迭代器的基础上发展而来,叫迭代器适配器,他提供了更多的操作功能,也不仅仅局限于容器,还可以应用于更多方面。 首先看看迭代器适配器的分支图:   以上的迭代器都叫做迭代器适配器,正如容器有标准容器和容器适配器,仿函数

K神丶的专栏 3786

高通Camx架构调试不求人:手把手教你开UMD/KMD Log与Dump图像(附离线Log合成脚本)

本文详细介绍了高通Camx架构的调试方法,包括UMD/KMD Log的精准配置与图像Dump技术,帮助工程师快速定位移动影像系统中的问题。通过实战案例和自动化脚本,提升调试效率,适用于图像色彩异常、帧率波动等常见问题的诊断与解决。

weixin_30516243的博客 254

迭代器适配器

1、插入型迭代器 insert iterator 使用 insert iterator 对容器元素进行赋值操作时,实际进行的是插入操作。赋值和插入操作一个明显的区别在于,赋值动作必须确保目标容器有足够的空间。插入的位置根据不同的 insert iterator有所不同: back_inserter:内部调用 push_back(),在容器末端插入元素。所以使用back_inserter的容器必须支持 push_back(),这些容器包括 vector、deque、list 和 string。 front_i

csdn_cjc的博客 248

倍福--实现TCP/IP的配置

控制器为CX5120,需要和上位机做通信,选择TCP/IP的通讯方式,本文介绍TCP/IP通信的操作步骤。 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制软件 3 1.2. 串口调试助手 3 1.2.1. TCP调试通信助手 3 授权文件 3 2.1 Lib文件 3 2.2. CAB文件 4 PLC程序编写 4 3.1. 引入TCP/IP库文件 4 3.2. Client端程序 5 3.2.1. 建立相关变量 5 3.3.2. 编写连接功能块

weixin_41883890的博客 5730

《拉依达的嵌入式\驱动面试宝典》—操作系统篇(二)

《拉依达的嵌入式\驱动面试宝典》 整合了所有我认为可能遇到的技术面试问题。所有问题及其答案均是我个人学习后查阅资料总结,每个回答都做了仔细的分析,在嵌入式及其驱动面试相关问题解析做到全网独一无二。学习或者转行到嵌入式、驱动开发领域学习的不二之选

拉依达不拉跨的博客 470

【C++】STL六大组件之一——适配器(adapters)

关于c++适配器的学习总结

Pursue quality, not quantity. 3849

月薪2万+的网络工程师,到底藏着哪些“绝活”?

在IT圈,网络工程师是个既神秘又硬核的职业。月薪2万+的网工,早已不是只会拉网线、改IP的“IT民工”,而是掌握了一身“绝技”的技术大牛。他们能让企业网络如丝般顺滑,面对宕机临危不乱,还能用自动化脚本批量搞定上百台设备。想知道这些高薪网工的秘密武器是什么?今天,我就以一个老网工的视角,结合自己和同行们的实战经验,扒一扒那些月薪2万+的网络工程师都身怀哪些绝技。如果你也想挤进高薪行列,不妨参考参考!

网络技术联盟站 359

STL 简单 iterator adapters 的实现

1. 简介 配接器(adapters)在STL组件的灵活组合上,扮演者轴承、转换的角色。Adapters事实上是一种设计模式(design pattern)。 百度百科对adapters模式的解释: 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——Gang of Four          在STL的体系中,有

chengonghao的博客 1850

SAP CAP 编程模型简介

官网 CAP 是用于构建企业级服务和应用程序的语言、库和工具框架。它引导开发人员沿着经过验证的最佳实践和大量现成的解决方案来应对重复性任务的“黄金之路”。 基于 CAP 的项目受益于对领域的主要关注。我们没有深入研究过于技术性的学科,而是专注于在快速变化的云技术世界中加速开发和保护投资。 CAP 框架融合了经过验证和广泛采用的开源和 SAP 技术,如下图所示。 在开源技术之上,CAP主要增加了: 核心数据服务 (CDS) 作为我们用于域模型和服务定义的通用建模语言。 用于 Node.js 和 Ja

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1544

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

STL配接器原理详解——迭代器配接器(iterator adapters)

一、配接器介绍 STL提供的各种配接器中: 改变仿函数接口者:称为function adapter 改变容器接口者:称为container adapter 改变迭代器接口者:称为iterator adapter 二、迭代器配接器介绍 待续 ...

董哥的黑板报 1742

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C++中的iterator adapters

C++标准库提供了几种预定义的特殊迭代器,迭代适配器。下面我们介绍常用的三种迭代适配器:插入迭代器,流迭代器,反向迭代器。     1.插入迭代器(insert iterator)     插入迭代器可以使迭代器进入插入模式,同时解决了copy算法进行复制时目标空间不够大的情况。     C++标准库中有三种插入迭代器:back_inserter(container),front_inserter

a simplicity of zone 1042

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

STL --- 七. 适配器(Adapters)

介绍STL的适配器(Adapters),以及几种分类:迭代器适配器、容器适配器,以及函数适配器。

bigger_belief的博客 1194

(十五)适配器adapters

适配器简介 adapter更像是一个换肤工程,如把参数的个数改一下或者把函数的名称改一下。 适配器根据它所改的对象分为三类 函数适配器 迭代器适配器 容器适配器 适配器更像是一个桥梁,只是修改接口,并不自己实现真正的功能 适配器都是用内含的方式实现对另一个东西的控制 容器适配器stack、queue 二者都内含了一个sequence,默认是deque。将容器的所有接口封装为个别的几个,或者将容器的接口封装后修改其名称 template <class T, class Sequence =

Mirevas的博客 176

STL与泛型编程<十>:迭代器适配器(Iterator Adapters)之逆向迭代器

此类迭代器可以使得算法能够以逆向(reverse mode)模式,安插模式(insert mode)进行工作,也可以流(streams)的模式搭配工作逆向迭代器reverse迭代器是一种适配器,重新定义递增运算和递减运算,使其行为正好倒置,所有标准容器都允许使用reverse迭代器来遍历元素,例子#include <iostream> #include <list> #include <itera

耗纸的博客 530

【STL】适配器(adapters)

定义:将一个class的接口转换为另一个class的接口,使原本因接口不兼容而不能合作的classes,可以一起运作。适配器扮演者轴承、转换器的角色。 分类: 1、容器适配器:改变容器接口。 STL提供两个容器迭代器:queue和stack。它们都是修饰deque后成为另一种风貌的容器。 2、迭代器适配器:改变迭代器接口。 Insert Iterator:将容器绑

Nestle的专栏 2937

DS container adapters <B> can not use iterator 1/99

容器适配器的主要目的是强制用户只能按照特定的抽象数据类型(ADT)规则来操作数据,从而保证数据结构的完整性和行为的正确性。必须是 LIFO(后进先出)。允许使用迭代器意味着你可以访问和修改栈中任何位置的元素,这会破坏 LIFO 的特性。必须是 FIFO(先进先出)。迭代器会允许你从中间删除或修改元素,破坏 FIFO 的原则。必须是堆结构。迭代器会暴露底层数组的无序状态,并且允许你修改某个元素而不触发堆的重新调整,这会破坏优先级队列的排序保证。

weixin_44525183的博客 775

STL 源码剖析:配接器 (stack,queue,插入迭代器,反向迭代器,流迭代器)

​ STL 所提供的各种配接器中,改变仿函数 (functors) 接口者,我们称为 function adapter,改变容器 (containers) 接口者,我们称为 container adapter,改变迭代器 (iterators) 接口者,我们称为 iterator adapter。 // // ​ 应用于容器:STL 所提供的两个容器,queue 和 stack,其实都是一种配接器...

Error Man 的博客 352

六 配接器(二)iterator adapters

一 概述(纵使千变化万,始终是扮演迭代器的部分作用,所以只能出现在需要迭代器的地方): STL提供的迭代器配接器包括:insert iterator、reverse iterator和stream iterator。 使用时需包含头文件。其中Insert iterators和Reverse iterators定义于中,Stream iterators定义于头文件中。

linux系统、网络编程和分布式计算 806

迭代器配接器(适配器)

 iterator adapter1 insert iterator    a front_inserter    b back_inserter    c inserter2 stream iterator    istream_iterator    ostream_iterator    3 reverse iterator1适合在对某些collection进行overwrite时使用2适合

mweiguo 952

STL源码解析-adapters

stl中存在多种适配器。

weixin_44570263的博客 155
上一篇: 二 迭代器(二)相关辅助函数
下一篇: 二 迭代器(四)迭代器相应型别及traits编程技法
first_wolf
博客等级 码龄14年 43粉丝 472原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值