六 配接器(二)iterator adapters

zynq的vitis工程烧录到Winbond(华邦)型号W25Q256JVEQ的QSPI FLAHS vitis2023.1直接支持W25Q256JVEQ。 阅读详情

一 概述(纵使千变化万,始终是扮演迭代器的部分作用,所以只能出现在需要迭代器的地方):


STL提供的迭代器配接器包括:insert iterator、reverse iterator和stream iterator。

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


二 inserter iterator:

(1)所谓insert iterator:即将一般迭代器的赋值操作变为插入操作。

主要观念:每一个insert iterators内部都维护有一个容器(必须由用户指定);容器当然有自己的迭代器。于是,客户端对insert iterators做赋值操作时,就在insert iterators中转化为该容器的迭代器的插入操作。即在insert iterators的operator =中调用底层迭代器的push_back()、push_front()和insert()操作函数。insert iterators的++、--、*、->等操作无意义,或者就是不允许的。


(2)相关操作:



(2)分类:

insert iterators分为三种:

back_insert_iterator(对应函数back_inserter(container &x));

front_insert_iterator(对应函数front_inserter(container &x));

insert_iterator(对应函数inserter(container &x,Iterator i));


(3)使用方法:

容器本身必须支持Insert迭代器所调用的函数,否则该中迭代器就不可用。

因此,back inserters操作只能用在vector、deque、list和strings身上;front inserters只能用在deque和list身上。

1.直接使用class来创建:

back_insert_iter<vector<int> > iter(vec);

front_insert_iter<deque<int> > iter(que);

insert_iterator<vector<int> >iter(vec)

2.使用辅助函数:

back_inserter();

front_inserter();

inserter();

3.直接用构造函数产生临时对象。

如:back_insert_iterator<vector<int> >(vec)


使用如下:

#include<iostream>
#include<iterator>
#include<vector>
#include<algorithm>
#include<deque>
using namespace std;
struct display
{
void operator()(const int &temp)
{cout<<temp<<endl;}
};
int main()
{
int array[]={1,3,5,7,9,2,4,6,8};
vector<int> vec1(array,array+9);
vector<int> vec2,vec3;


copy(vec1.begin(),vec1.end(),back_inserter(vec2));//使用辅助函数创建。
for_each(vec2.begin(),vec2.end(),display());
cout<<endl;

//copy(vec1.begin(),vec1.end(),front_inserter(vec3));//错误,vector不支持push_front().
deque<int> que;

front_insert_iterator<deque<int> >iter(que);//直接使用类创建。
copy(vec1.begin(),vec1.end(),iter);
for_each(que.begin(),que.end(),display());
cout<<endl;


copy(vec1.begin(),vec1.end(),inserter(que,que.end()));
for_each(que.begin(),que.end(),display());
}


三 reverse iterator:

reverse iterator:将一般迭代器的前进方向进行逆转。


(1)使用方法:

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

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

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


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

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


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

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

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



四 iostream iterator:

iostream iterator:可以将迭代器绑定到某个iostream对象身上。

绑定到istream对象(例如:std::cin),称为istream_iterator。

绑定到ostream对象(例如:std::cout),称为ostream_iterator。


(1)istream_iterator:

所谓绑定一个istream object,其实就是在istream iterator内维护一个istream number,客户端对于这个迭代器所做的operator ++操作,会被引导调用迭代器内部所含的那个istream member的输入操作。这个迭代器是Input Iterator,不具备operator --。


相关操作:



使用方法:

1.istream_iterator<T> iter(产生一个EOF迭代器,end of stream)

或istream_iterator<T> iter(cin)(只要客户端定义一个istream_iterator并绑定到某个istream对象,程序便立刻停在istream_iterator<T>::read()等待输入一个T类型的值 )

例如:

istream_iterator<int> intRead(cin);//程序停在这里,等待输入一个int类型的值。
istream_iterator<int> intEof;//产生一个end of stream迭代器
while(intRead!=intEof)
{
cout<<*intRead<<endl;
++intRead;//调用istream的++就引导迭代器内所含的istream的输入operator>>操作。
}


2.直接调用构造函数产生临时对象。


(2)ostream_iterator

所谓绑定到一个ostream object,就是在其内部维护一个ostream object,客户端对于这个迭代器所做的operator=操作,会被引导调用对应的(迭代器内部所含的)那个ostream member的输出操作(operator <<)。这个迭代器是OutputIterator。


相关操作:



使用方法:

1.直接使用类创建迭代器对象:

例如:

ostream_iterator<int> iter1(cout);
ostream_iterator<int> iter2(cout,"\n");


2.使用构造函数创建临时的迭代器对象:

例如:

copy(vec1.begin(),vec1.end(),ostream_iterator<int>(cout));
copy(vec1.begin(),vec1.end(),ostream_iterator<int>(cout,"\n"));





【学习系列】SAP RAP 17:RAP应用部署集成至Fiori Launchpad 【S4HC Public Edition】 本文详细介绍了在SAP S/4HANA Cloud环境中部署RAP应用集成到Fiori Launchpad的两种方法:使用BAS(SAP Business Application Studio)和VSCode。主要步骤包括:1)在BTP中配置Destination连接ES环境;2)设置信任关系;3)创建BAS开发空间;4)通过Fiori应用生成器部署RAP应用;5)创建IAM App、Business Catalog和Business Role;6)配置Launchpad Space和Pages。文章还提供 阅读详情

相关推荐

推荐系统:NDCG评价指标及其Python实现方法

除了推荐任务,在二分类任务中,也可以计算该指标,代码如下: # ndcg def get_dcg(y_pred, y_true, k): #注意y_pred与y_true必须是一一对应的,并且y_pred越大越接近label=1(用相关性的说法就是,与label=1越相关) df = pd.DataFrame({"y_pred":y_pred, "y_true":y_true}) ...

lanyuelvyun的博客 8241

C++——迭代器的详细案例讲解

文章目录迭代器的分类:1、顺序迭代器2、插入型迭代器2.1随机插入型迭代器①insert_iterator 的使用:②inserter的使用:③如何自己实现inserter2.2后插型迭代器①back_insert_iterator的使用②back_inserter的使用:③如何自己实现back_inserter2.3前插型迭代器①front_insert_iterator的使用②front_inserter的使用3、流迭代器3.1 ostream_iterator3.2istream_iterator 注

仟各的博客 1688

卡尔曼滤波与目标追踪

卡尔曼滤波与目标追踪为什么要学卡尔曼滤波?卡尔曼滤波是什么?一些概率论的知识基础卡尔曼滤波完整推导状态估计计算卡尔曼增益预测和更新 卡尔曼滤波部分我打算分三节(三次博客的内容): 卡尔曼滤波与行人状态估计 扩展卡尔曼滤波(EKF)与传感器融合 过程模型,无损卡尔曼滤波(UKF)与车辆状态轨迹 为什么要学卡尔曼滤波? 卡尔曼滤波以及其扩展算法能够应用于目标状态估计,如果这个目标是行人,那么就是行人状态估计(或者说行人追踪),如果这个目标是自身,那么就是车辆自身的追踪(结合一些地图的先验,GPS等数据的话就

qq_43232556的博客 4171

linux运维(六)

我要特么早点看完马哥视频,我之前不至于死的那么惨啊!本以为能从事运维的话,这辈子就可以不用学编程了,实在太年轻了!哭死了,春秋大梦破灭了,啊啊啊。我现在想从事运维都难,不过确实是我没理解好,没想到对方来真的,经历的太少。希望10月份爆发一次,就1次就行!以后面试不能像背,应该像给小白讲的那样回答,可是我做不到,555...1、将两个文件按列合并,按行合并呢?答:行:...

weixin_34130389的博客 248

Windows电脑如何用MobaXterm连接宇树G1机器人?保姆级SSH配置指南

本文提供了一份详细的保姆级教程,指导Windows用户使用MobaXterm通过SSH连接宇树G1机器人。内容涵盖从物理网络配置、MobaXterm安装与SSH会话创建,到文件传输、X11转发等高级功能,并包含常见问题排查与安全加固建议,帮助开发者快速建立稳定可靠的远程开发连接。

purple的博客 878

告别视频广告:OpenWrt下luci-app-adbyby plus/lite的完整配置与避坑手册

本文详细介绍了在OpenWrt路由器上配置Adbyby Plus/Lite广告屏蔽工具的完整流程与优化方案。从环境准备、规则文件手动配置到高级性能调优,帮助用户有效拦截视频前贴片广告和弹窗广告,提升家庭网络浏览体验。特别针对官方源停止维护的问题,提供了实用的规则更新解决方案。

weixin_29306011的博客 737

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

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

董哥的黑板报 1744

【人工智能之深度学习】12. BERT微调实战:医疗文本分类的领域自适应技巧与工业级实现

摘要:医疗文本分类是自然语言处理在医疗健康领域的核心应用,可辅助疾病诊断、病历结构化和医疗质量监控。然而,医疗文本的专业术语密集、实体关系复杂及数据长尾分布等特性,导致通用BERT模型性能受限。本文系统阐述医疗文本分类的领域自适应技术,从理论原理到工业级实现展开全流程讲解。首先分析医疗文本的独特属性及技术挑战;随后详解领域继续预训练、适配器微调、对抗训练等核心技术的数学原理;构建包含数据预处理、模型优化、隐私保护的完整实战架构;通过疾病分类、情感分析、事件检测三大案例验证技术有效性。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1004

STL 简单 iterator adapters 的实现

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

chengonghao的博客 1850

AEJoy —— 表达式之仅限在某一维摆动【JS】

效果图 wiggle() 的作用仅限于水平方向 想法 wiggle() 确实是一个非常方便的工具,但有时您希望对它有更多的控制。在本例中,我们希望仅将摆动限制在水平方向。 设计 要理解 wiggle() 最重要的一点是,它生成的结果与应用它的属性具有相同的维度。例如,如果你将 wiggle() 应用于 3D 层的 position 属性,结果将是一个由三个元素组成的数组(x、y 和 z 各一个)。我们需要做的就是将 wiggle() 的结果捕捉到一个变量(我们称之为 “w” ),然后从这个变量中提取我们想

ShaderJoy 的兴趣技术杂货铺 2094

【11】科曼医疗——科曼医疗 嵌入式--面试,校招,面试问答记录

科曼医疗嵌入式校招面试记录:3位面试官分别考察应用层技术、底层技术和HR面。技术问题涵盖C++特性(多态、虚函数、指针与引用区别)、内存管理(malloc与new对比)、嵌入式基础(51最小系统、IIC/SPI协议)及项目经验(智能黑板擦专利项目)。同时考察了Linux使用经验、STM32开发及嵌入式操作系统认知。最后环节应聘者询问了开发环境及面试流程。面试内容全面覆盖嵌入式开发核心知识点。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1249

STL学习笔记(七)---仿函数与配接器

仿函数(函数对象) 历史上有两个不同的名称,仿函数(functors)是早期的命名,C++标准规格定案后所采用的新名称是函数对象(function objects)。这种东西在调用者可以像函数一样地被调用(调用),在被调用者则以对象所定义的function call operator扮演函数的实质角色。 STL仿函数的分类,若以操作数(operand) 的个数划分,可分为一元和二元仿函数;若以功能划分,可分为算术运算(Arithmetic) 、关系运算(Rational)逻輯运算(Logical) 三大

qq_44272681的博客 269

PMO与供应链管理的整合:端到端项目交付的优化策略

在当今全球化和市场竞争日益激烈的环境中,组织面临着前所未有的项目复杂性和交付压力。传统上相互独立的项目管理办公室(PMO)与供应链管理(SCM)正逐渐意识到:只有通过无缝整合,才能实现真正高效的端到端项目交付。本文深入探讨了PMO与供应链管理整合的战略价值、核心框架和实施路径,通过生动的比喻、实际案例和实用工具,展示了如何打破部门壁垒,构建协同高效的项目生态系统。无论您是PMO负责人、供应链专业人士还是高级管理层,都将从本文获得重塑项目交付模式、优化资源利用、降低风险并提升组织竞争力的宝贵见解和行动指南。

项目管理的博客 947

Iterator Adapters(迭代器配接器)

C++标准程序库提供了数个预定义的特殊迭代器,即所谓的迭代器配接器(Iterator Adapters),赋予了迭代器更强大的能力。 Reverse Iterators(逆向迭代器) 逆向迭代器是一种配接器,重新定义递增运算和递减运算,使其行为正好倒置,这么一来,如果你使用这类迭代器,算法将以逆序次序来处理元素。所有标准容器都允许使用Reverse迭代器来遍历元素。 例子 #inc

xusworld的专栏 420

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

STL——配接器(adapters)

一、配接器 《Design Patterns》一书提到23个最普及的设计模式,其中对adapter样式的定义如下:将一个class的接口转换为另一个class 的接口,使原本因接口不兼容而不能合作的classes,可以一起运作。 1. 配接器概观与分类 STL 所提供的各种配接器中,改变仿函数接口者,我们成为function adapter;改变容器接口者,我们称为container ada...

weixin_30950887的博客 174

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Ch8 配接器(adapters)

8.1 配接器之概观与分类 function adapter:改变仿函数(functors)接口; container adapter:改变容器(container)接口; iterator adapter:改变迭代器(iterator)接口。 8.1.1 container adapters STL提供的两个容器queue和stack,都是修饰容器deque接口的container ada...

weixin_30532987的博客 115

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

STL源码分析:Adapters

配接器在STL组件的灵活组合运用功能上,扮演着轴承、转换器的角色。Adaper这个概念,事实上是一种设计模式。在《设计模式》中adapter定义如下:将一个class的接口转换为另一个class的接口,使原本因接口不兼容而不能合作的classes,可以一起运作。 配接器分为 function adapter(通过它们之间的绑定,组合,修饰能力,几乎可以无限制地创造出各种可能的表达式)...

a857351839的博客 141

迭代器配接器(适配器)

 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 源码剖析:配接器 (stack,queue,插入迭代器,反向迭代器,流迭代器)

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

Error Man 的博客 352

统计源码 中函数_读书笔记:《STL源码剖析》-V

此篇章为《STL源码剖析》的读书笔记。对应于读书笔记:《STL源码剖析》-IV 在需要作出解释的地方,我会添加相应的注释,结合视频学习,与笔者的知识储备。如果有任何错误,或者疑虑,请发送邮件至ashior@qq.com。仿函数(函数对象)仿函数的相应型别主要用来表现函数参数型别和传回值型别。<stl_function.h>定义了两个classes,分别代表一元仿函数和二元仿函数(ST...

weixin_39870132的博客 77

STL标准库(一)

目录 1.containers容器 2.iterators迭代器 3.allocator空间配置器 4.adapters配接器 5.algorithms算法 6.functors仿函数 致敬开发者Alexander Stepanov、Meng Lee和David R Musser containers 算法重要,但是算法是建立在对数据操作的基础上,如何存放数据显得尤为重要。在STL开发者大牛的...

EIDoradol的博客 697

C++静态多态与模板详解

多态”和“模板”是 C++ 中非常重要的两个概念。它们看起来都能实现“不同对象执行不同操作”,但原理并不相同。什么是多态;什么是静态多态;什么是动态多态;编译器什么时候决定调用哪个函数;函数模板和类模板怎样工作;什么是模板实例化;什么是模板特化;什么是;什么是 Concepts;什么是 CRTP;静态多态和动态多态应该怎样选择。

clearhenry的博客 213

C++进阶:多态、模板与STL核心原理与工程实践

面向对象编程中的多态机制,通过虚函数和抽象类,实现了运行时动态绑定,赋予代码强大的扩展性和可维护性。泛型编程则通过模板技术,将数据类型参数化,在编译期生成类型安全的通用代码,是提升代码复用性的关键。这两大核心思想共同构成了现代C++的基石,其技术价值在于实现了算法与数据结构的有效分离。标准模板库(STL)正是这一思想的集大成者,它提供了容器、算法、迭代器等通用组件,广泛应用于高性能计算、游戏引擎、基础设施软件等场景。本文结合**虚函数表**和**迭代器失效**等核心细节,深入解析其底层机制与工程实践要点,帮

weixin_30791095的博客 362

C++模板编程:从函数模板到类模板的实战解析与STL设计原理

泛型编程是C++中实现代码复用和类型安全的核心范式,它通过在编译期生成特定类型的代码来消除冗余。其基本原理是利用模板作为代码蓝图,编译器根据实际类型参数进行实例化,从而实现编译期多态。这种技术价值在于提升代码的灵活性和效率,同时保证类型安全,广泛应用于数据结构、算法库和通用组件开发。在C++标准模板库(STL)中,泛型编程思想体现为容器、算法和迭代器的分离设计,其中函数模板用于通用算法,类模板用于泛型容器。本文深入探讨了函数模板的参数推导、特化机制以及类模板的资源管理和设计陷阱,并结合模板元编程和现代C++

weixin_34168880的博客 337

AI工程师专属资讯简报:精准、可执行、零噪音的技术信息筛选方法

AI资讯简报本质上是一种面向工程实践的知识服务,其核心价值不在于信息广度,而在于对技术问题的精准响应能力。它依托问题驱动的内容架构、可复现的实操验证机制和强上下文绑定的信息表达,将海量AI动态转化为一线开发者‘今天就能用上’的确定性方案。关键技术特征包括:基于真实开发场景的‘问题连接器’逻辑、严格遵循一屏原则的三栏式信息密度设计,以及覆盖启动成本、调试友好度与生产就绪度的工具深潜评测体系。这类简报正成为MLOps工程师、LLM应用开发者和独立技术决策者在信息过载时代的关键认知基础设施。

729

C++模板与STL:从泛型编程到高效容器算法实践

泛型编程是C++实现代码复用的核心范式,其核心思想是编写与数据类型无关的通用代码。通过模板技术,编译器能够根据实际使用的类型自动生成具体代码,从而避免为每种数据类型重复编写逻辑相似的函数或类。这一原理极大地提升了代码的复用性和可维护性,其技术价值在于将算法与数据结构解耦,使得开发者能够专注于业务逻辑而非底层实现。在工程实践中,标准模板库(STL)是泛型编程最成功的应用,它提供了丰富且高度优化的容器(如vector、map)、算法(如sort、find)和迭代器等组件。这些组件通过模板实现泛化,能够广泛应用于

weixin_33428613的博客 342
上一篇: 六 配接器(一) container adapters
下一篇: 六 配接器(三)function adapters
first_wolf
博客等级 码龄14年 43粉丝 472原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值