六 配接器(二)iterator adapters

ROS基础(一)——命令行代码(以小乌龟程序为例) ROS学习(一)——命令行代码(以小乌龟程序为例)1 基础命令行语句1.1 roscore1.2 rqt_graph(显示系统计算图)1.3 rosnode(显示所有节点相关信息)1.4 rostopic(和话题相关)2 服务类型指令rosservice同时存在两只海龟3 指令记录 1 基础命令行语句 从大二四旋翼无人机编队后就没再接触过ROS了,最近由于科研任务需要重新捡起来,打算系统学一下!学习过程参考古月居老师的视频,有兴趣的同学可以去[BliBli]学习。 学习平台:Ubuntu 18.04 硬件 阅读详情

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


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"));





在ARM平台上使用Anbox和LXC进行ARM开发调试 在ARM平台上使用Anbox和LXC进行ARM开发调试是一种强大的工具组合。通过安装和配置Anbox和LXC,以及在LXC容器中运行ARM应用程序,开发人员可以方便地进行ARM开发和调试。LXC(Linux容器)是一种轻量级虚拟化技术,它提供了一种在单个主机上运行多个独立的Linux容器的方法。我们将讨论安装和配置Anbox和LXC,以及如何在容器中运行ARM应用程序。通过上述步骤,你现在可以在LXC容器中运行ARM应用程序,并使用Anbox在ARM平台上进行开发和调试。步骤2:启动LXC容器。 阅读详情

相关推荐

【遥感数字图像处理(朱文泉)】第四章 变换域处理方法

变换域的处理方法

甜子yu的博客 4308

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

薛定谔 | 先导化合物优化与相互作用可视化

当获得针对某个靶点的先导分子后,想要在此基础上进行化学结构修饰。为了提升化学改造的成功率可以采用本教程方法进行结构虚拟改造/优化。每用薛定谔处理一个新任务,第一步必须创建新的project以方便日后管理。选项卡中修改工作路径(可以方便地找到输出文件)

药研猿的博客 2144

linux运维(六)

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

weixin_34130389的博客 248

Meta DINOv3实战指南:如何用7B参数ViT模型提升你的视觉任务性能(附Hugging Face部署教程)

本文提供了Meta DINOv3 7B参数ViT模型的实战部署指南。文章详细解析了该自监督视觉模型的优势,并重点演示了如何在Hugging Face平台上高效加载这一大规模模型,同时给出了图像分类、语义分割等下游任务的性能提升技巧与代码示例,帮助开发者在实际视觉任务中应用这一前沿技术。

pz89012345的博客 324

UniRx之基本语法格式

想要更好的去学习UniRx,我们最好是先理解UniRx 的语法格式。就像我们去学习英语或者汉语一样,理解了基本的语法规则后,再学其他的就信手拈来了。

TxNet 924

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

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

董哥的黑板报 1744

Windows 11 安装 Miniconda + Mamba,配置国内源

本文详细介绍了在 Windows 11 系统下安装 Miniconda 并配置 Mamba 的完整流程,包括选择精简版 Miniconda 的理由、安装过程中的关键选项设置、配置清华大学镜像源以加速包下载,以及在 base 环境中设置 pip 国内源。同时说明了 Mamba 相较 Conda 的性能优势,并指导用户完成 Mamba 安装与 Shell 集成,最终通过命令验证环境管理功能,帮助用户构建高效、轻量的 Python 开发环境。

寒水馨 · 轻量级技术文档 · hanshuixin.org 3344

STL 简单 iterator adapters 的实现

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

chengonghao的博客 1850

【Matlab算法】MATLAB实现的语音信号降噪算法(附MATLAB完整代码)

语音信号降噪是语音处理领域中的一个关键问题。在实际应用中,语音信号常常被各种环境噪声污染,这不仅影响了语音的质量,还可能导致后续处理(如语音识别)的性能下降。因此,开发有效的降噪算法对于提高语音通信质量、改善语音识别系统性能等具有重要意义。 本文将介绍并实现两种经典的语音信号降噪算法:谱减法和维纳滤波。这两种方法都是基于频域处理的技术,具有实现简单、计算效率高的特点。通过MATLAB实现这些算法,我们可以直观地比较它们的性能和降噪效果。

Albert_Lsk的博客 1329

YOLOv8改进 | 融合篇,YOLOv8改进主干网络为MobileNetV4+CBAM注意机制+Powerful-IoU损失函数(2024 最新IOU),全网首发,实现极限涨点

本文将在 YOLOv8 主干中引入 MobileNetV4 轻量化骨干,同时,在检测头引入 CBAM机制注意力机制,并采用 Powerful-IoU 损失函数作为模型的损失函数,其中,MobileNetV4 通过引入通用反向瓶颈(UIB)搜索块和 Mobie MQA 注意力模块创新设计,实现了模型的轻量级化;同时,MobileNetV4 采用了优化的 NAS 策略,通过粗粒度和细粒度搜索相结合的方法,显著提高了搜索效率并改善了模型质量。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3783

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

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

qq_44272681的博客 269

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Iterator Adapters(迭代器配接器)

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

xusworld的专栏 420

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

STL——配接器(adapters)

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

weixin_30950887的博客 174

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

C++模板与STL:从泛型编程到标准库实践

泛型编程是一种编程范式,其核心思想是编写独立于数据类型的算法和数据结构。其原理是通过参数化类型,让同一套代码逻辑能够适用于多种数据类型,从而实现代码复用和类型安全。这种技术价值在于显著减少代码重复,提高开发效率,并增强程序的灵活性和可维护性。在C++中,泛型编程主要通过模板技术实现,广泛应用于构建通用库和框架。其典型应用场景包括数据容器、算法库以及需要处理多种数据类型的工具函数。C++标准模板库(STL)正是这一思想的集大成者,它提供了丰富的容器、算法、迭代器等组件,极大地提升了开发效率。本文以C++模板和

weixin_34082789的博客 553
上一篇: 六 配接器(一) 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、付费专栏及课程。

余额充值