STL源码剖析 第八章 配接器

  • 设计模式:将一个类的接口转化为另外一个类的接口

配接器的概观和分类

  • 改变仿函数接口  函数配接器  ;queue和stack 通过修饰deque函数接口来实现
  • 改变容器接口      容器配接器  ; insert、reverse、iostream 等iterators他们的接口可以由iterator获得

insert iterator

  • 将一般迭代器的赋值操作转变为插入操作
  • 例子:尾部插入 back_insert_iterator ; 头部插入 front_insert_iterator ;任意位置 insert_insert_iterator
  • 对应的函数封装

Reverse Iterators

  •  将迭代器的行进方向进行逆转,使得operator++变成 后退操作;operator--变成前进操作
  • 主要目的是为了 从尾端进行前进的算法上

Iostream Iterators

  • 将迭代器绑定到某一个 iostream对象身上
  • 例子:绑定到istream(std::cin) 称为 istream_iterator,拥有输入功能
  • 例子:绑定到istream(std::cout) 称为 ostream_iterator,拥有输出功能,用于屏幕输出
  • 改变迭代器接口   迭代器配接器
#include <iterator>
#include <deque>
#include <algorithm>
#include <iostream>int main(){//将outite绑定到cout//每次对 outite 指派一个元素,随后接一个" "std::ostream_iterator<int>outite(std::cout," ");int ia[] = {0,1,2,3,4,5};std::deque<int>id(ia,ia+6);//将所有的元素拷贝到outite(也就是拷贝到cout)std::copy(id.begin(),id.end(),outite); //0 1 2 3 4 5std::cout << '\n';//将ia[] 的部分元素拷贝到id内,使用front_insert_iterator//注意:front_insert_iterator会将assign 操作改为push_front操作//因为vector不支持push_front()std::copy(ia+1,ia+2, std::front_inserter(id));std::copy(id.begin(),id.end(),outite);std::cout << '\n';std::copy(ia+3,ia+4, std::back_inserter(id));std::copy(id.begin(),id.end(),outite);std::cout << '\n';//搜寻元素5所在的位置std::deque<int>::iterator ite = std::find(id.begin(),id.end(),5);std::copy(ia+0,ia+3, std::inserter(id,ite));std::copy(id.begin(),id.end(),outite);std::cout << '\n';//将所有元素逆向拷贝//使用rbegin() 和 rend() 关联到revere_iteratorstd::copy(id.rbegin(),id.rend(),outite);std::cout << '\n';
}

应用于仿函数

  •  配节操作:系结(bind)、否定 、组合、对一般成员或者成员函数的修饰

 

  • 注意事项:期望获得配接能力的组件,本身必须是可以配接的,即一元仿函数需要继承unary_function、二元仿函数需要继承binary_function、成员函数必须以mem_fun处理过、一般函数需要以ptr_fun处理过
  • 一个未经ptr_fun处理过的一般函数,虽然可以使用,但是没有任何的配接的 能力

 容器适配器

  • stack
  • stack封装了所有deque的对外接口,只有符合规则的函数才会被开放,因此stack是作用于容器上的配接器

  • queue

 Iterator adapters

insert iterators

  • 内部维护一个容器,容器有自己的迭代器,因此客户端对insert iterators赋值操作,在insert iterators中转换成对这个容器的迭代器进行插入操作

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

请使用手机"扫一扫"x

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

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

相关文章

python中random库_python标准库之random模块

Python中的random模块用于生成随机数。 下面具体介绍random模块的功能&#xff1a; 1.random.random() #用于生成一个0到1的 随机浮点数&#xff1a;0< n < 1.0 1 import random 2 a random.random() 3 print (a)2.random.uniform(a,b) #用于生成一个指定范围内的随机符…

java 可变个数形参

概念 案例 package lesson.l10_oop;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/1 14:53* function 可变个数形参*/ public class ChangeableFormalParameter {public static void main(String[] args) {ChangeableFormalParameter parameter new Ch…

C++标准库 第七章 STL迭代器

迭代器 能力&#xff1a;行进和存取的能力Input迭代器 一次一个向前读取元素&#xff0c;按此顺序一个一个返回元素例子&#xff1a;从标准输入装置(键盘) 读取数据&#xff0c;同一个数据不会被读取两次&#xff0c;流水一样&#xff0c;指向的是逻辑位置使用前置式递增运算…

nacos集群的ap cp切换_阿里Nacos-配置-多环境

多环境的配置隔离是配置中心最基础的一个功能之一。不同的环境配置的值不一样&#xff0c;比如数据库的信息&#xff0c;业务的配置等。Spring Boot 多环境配置首先我们来回顾下在Spring Boot中用配置文件的方式怎么进行环境的隔离。默认我们都会创建一个application.propertie…

java 值传递机制

说明 案例1 案例2 案例3 案例4 案例5 案例6 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/2 21:24* function 将对象作为参数传递给方法*/ public class Circle {double radius;public double findArea() {return Math.PI * Ma…

密码学专题 非对称加密算法指令概述 RSA

非对称加密算法也称为公开密钥算法&#xff0c;其解决了对称加密算法密钥需要预分配的难题&#xff0c;使得现代密码学的研究和应用取得了重大发展。非对称加密算法的基本特点如下: 加密密钥和解密密钥不相同;密钥对中的一个密钥可以公开(称为公开密钥);根据公开密钥很难推算出…

python元胞自动机模拟交通_结构专栏 | 解析DEFORM软件中的元胞自动机法

点击上方蓝色字体&#xff0c;关注我们导语金属材料的性能取决于内部的微观组织结构&#xff0c;而好的材料性能和价格是产品最大的优势。随着现代物理冶金、热成形技术、热处理技术和计算机技术的兴起与发展&#xff0c;使预测和控制金属材料热加工过程中的组织演变成为可能。…

java 递归

概念 代码 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/2 21:42* function 递归&#xff1a;求n个数的和、乘积*/ public class Recursion {public static void main(String[] args) {Recursion recursion new Recursion();S…

密码学专题 非对称加密算法指令概述 DH算法指令

DH概述 用于密钥交换的公开算法&#xff0c;广泛应用于各种安全协议SSL协议同样支持DH算法DH算法使用之前需要预先共享两个参数&#xff0c;本原元g和模n&#xff0c;这两个参数影响到算法的安全性&#xff0c;因此需要预先生成并检测其安全性生成这些必要参数和管理这些参数的…

java 封装和隐藏 权限修饰符

概念 问题的引入 封装性的体现 权限修饰符 案例 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/3 15:28* function*/ public class Person {private int age;public void setAge(int age) { /* if (age<0||age>…

密码学专题 非对称加密算法指令概述 DSA算法指令

DSA算法和DSA指令概述 DSA算法是美国国家标准的数字签名算法&#xff0c;只具备数字签名的功能不具备密钥交换的功能生成DSA参数然后生成DSA密钥&#xff0c;DSA参数决定了DSA密钥的长度三个指令首先是dsaparam指令&#xff0c;该指令主要用来生成DSA密钥参数&#xff0c;并提…

每天定时打开某个网页_Python科普帖定时通知

0 复习上一关我们学习了selenium&#xff0c;它有可视模式与静默模式这两种浏览器的设置方法&#xff0c;二者各有优势。然后学习了使用.get(URL)获取数据&#xff0c;以及解析与提取数据的方法。在这个过程中&#xff0c;我们操作对象的转换过程&#xff1a;除了上面的方法&am…

java 构造器

概念 案例1 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/3 15:28* function*/ public class Person {private int age;private String name;public Person() {this.age 18;}public Person(int age, String name) {this.age …

密码学专题 信息摘要和数字签名指令

信息摘要 区别于对称加密和非对称加密&#xff0c;信息摘要算数是一种不可逆的操作&#xff0c;无论输入数据的大小输出的数据长度是固定的信息摘要算数对输入很敏感&#xff0c;即使数据变化很细微&#xff0c;输出的结果会出现很大的差异从不同输入得到相同的输出的概率非常…

dataframe 筛选_Spark.DataFrame与Spark.ML简介

本文是PySpark销量预测系列第一篇&#xff0c;后面会陆续通过实战案例详细介绍PySpark销量预测流程&#xff0c;包含特征工程、特征筛选、超参搜索、预测算法。在零售销量预测领域&#xff0c;销售小票数据动辄上千万条&#xff0c;这个量级在单机版上进行数据分析/挖掘是非常困…

密码学专题 证书和CA指令 证书和CA功能概述

为什么需要证书 实现了公钥和私钥的相互验证&#xff0c;但是任何人都可以生成很多的密钥对&#xff0c;密钥对并没有关联实体身份&#xff0c;因此诞生可数字证书前提是CA是所有用户都信任的用户需要将自己的信息和公钥交给CA进行认证生成一个属于自己并被其与用户认可的数字…

密码学专题 证书和CA指令 申请证书|建立CA|CA操作|使用证书|验证证书

Req指令介绍 功能概述和指令格式 req指令一般来说应该是提供给证书申请用户的工具&#xff0c;用来生成证书请求以便交给CA验证和签发证书。但是&#xff0c;OpenSSL的req指令的功能远比这样的要求强大得多&#xff0c;它不仅可以生成RSA密钥、DSA密钥&#xff0c;以及将它们…

密码学专题 OpenSSL标准转换指令

概述 繁多复杂的各种文件编码格式、证书格式和密钥格式等。事实上&#xff0c;并非OpenSSL开发者想要将数字世界弄得如此令人头疼&#xff0c;只是由于各种原因&#xff0c;数字世界存在各种不同的标准&#xff0c;为了尽量兼容这些不同的标准&#xff0c;OpenSSL开发者才相应…