迭代器

STL 配接器(adapters)

南笙酒味 提交于 2019-12-06 04:59:12
定义 配接器(adapters):将一个class的接口,转换为另一个class的接口,使得原来不能一起使用相互兼容的classes,可以一起协同工作。 配接器是一种设计模式。 STL中提供的各种配接器可分为三类: 改变仿函数接口者,称之为function adapter 改变容器接口者,称之为container adapter 改变迭代器接口者,称之为iterator adapter container adapter graph LR deque --- stack deque --- queue iterator adapter graph LR iterator --- reverse_iterator iterator --- Insert_iterator iterator --- iostream_iterator Insert_iterator --- back_insert_iterator Insert_iterator --- front_insert_iterator Insert_iterator --- insert_iterator 插入迭代器:将一般迭代器的赋值操作转变为插入操作。 reverse adapter 反向迭代器:将一般迭代器的行进方向逆转,使得原本应该前进的operator++变为了后退操作,原本应该后退的operator-

12. 迭代器,闭包,函数名的运用

拟墨画扇 提交于 2019-12-06 03:04:01
11. 前 方 高能 - 迭代器 本节主要内容: 函数名的使 用以及第 一类对象 闭包 迭代器 一. 函数名的运 用. 函数名是 一个变量量, 但它是 一个特殊的变量量, 与括号配合可以执 行行函数的变量量. 1. 函数名的内存地址 def func(): print("呵呵") print(func) 结果: <function func at 0x1101e4ea0> 2. 函数名可以赋值给其他变量量 def func(): print("呵呵") print(func) a = func # 把函数当成 一个变量量赋值给另 一个变量量 a() # 函数调 用 func() 3. 函数名可以当做容器类的元素 def func1(): print("呵呵") def func2(): print("呵呵") def func3(): print("呵呵") def func4(): print("呵呵") lst = [func1, func2, func3] for i in lst: i() 4. 函数名可以当做函数的参数 def func(): print("吃了了么") def func2(fn): print("我是func2") fn() # 执 行行传递过来的fn print("我是func2") func2(func) #

Python之路Day11

半城伤御伤魂 提交于 2019-12-06 02:58:27
函数名的第一类对象及使用 当作值,赋值给变量 def func(): print(1) print(func) #查看函数的内存地址 a=func print(a) a()    可以当作容器中的元素 def func(): print(1) def foo(): print(2) #lst.append(func) #lst.append(foo) #print(lst) ​ lst=[func,foo] #放到列表 for i in lst: i() dic={} #放到字典中    函数名可以当作函数的参数 def func(a): a() print(111) def foo(): print(222) def f1(): print(333) func(f1) foo()    函数名可以当作函数的返回值 def func(): def foo(): print(111) return foo func()()    f-strings 格式化 f"{}" 迭代器 可迭代对象 list,tuple,str,set,dict 取值方式只能直接看 只要具有 _iter_() 方法就是一个可迭代对象 s._iter_() -- 将可迭代对象转换成迭代器 具有 _iter_()和_next_() 两个方法的才是迭代器 迭代器再执行 _iter_ 还是原来的迭代器 for

《STL源码剖析》简介

匆匆过客 提交于 2019-12-06 00:55:43
STL 源码剖析 ---- 侯捷 STL 主要包括六个组件: 1 、配置器:负责空间配置和管理。 2 、迭代器:扮演容器和算法之前的胶合剂,所谓“泛型指针”。 3 、容器:各种数据结构,如 vector,list,set,map 等。 4 、算法:各种常用算法,如 sort,search,copy 等。 5 、仿函数:一种重载 operator() 的 class 或 class template, 可作为算法的某种策略。 6 、配接器:用来修饰容器或者仿函数或者迭代器接口的东西,例如 queue, 其底部基于 deque 实现。 这本书很经典, 该书介绍 SGI STL 版本(该版本被 GCC 采用),尝试把书中的代码再过遍,最好按自己的理解重写遍。 来源: https://www.cnblogs.com/ho966/p/11954599.html

常见迭代器模式

左心房为你撑大大i 提交于 2019-12-05 23:20:42
枚举器的迭代器模式 class MyClass {   public IEnumrator<string> GetEnumerator()   {     return IteratorMethod();   }   public IEnumerator<string> IteratorMethod()   {     yield return ..;   } } Main {   MyClass mc = new MyClass();   foreach(string x in mc)   ..... } 可枚举类型的迭代器模式 class MyClass {   public IEnumerator<string> GetEnumerator()   {     return IteratorMethod().GetEnumerator();   }   public IEnumerable<string> IteratorMethod()   {     yield return ...;   } } Main {   MyClass mc = new MyClass();   foreach(string x in mc)   ......   foreach(string x in mc.IteratorMethod())   ..... } 来源: https:/

详解C#迭代器

☆樱花仙子☆ 提交于 2019-12-05 21:56:25
 一、迭代器(Iterator)通过持有迭代状态可以获取当前迭代元素并且识别下一个需要迭代的元素,从而可以遍历集合中每一个元素而不用了解集合的具体实现方式;   实现迭代器功能的方法被称为迭代器方法,迭代器方法的返回值类型可以是以下4种接口类型中任意一种:位于命名空间System.Collections中的IEnumerable、IEnumerator和位于命名空间System.Collections.Generic中的IEnumerable<T>、IEnumerator<T>,其中接口IEnumerable和IEnumerator代码: public interface IEnumerable { IEnumerator GetEnumerator(); } public interface IEnumerator { object Current { get; } bool MoveNext(); void Reset(); }   ※对应泛型接口IEnumerable<T>和IEnumerator<T>代码: public interface IEnumerable<out T> : IEnumerable { IEnumerator<T> GetEnumerator(); } public interface IEnumerator<out T> : IDisposable

python基础 生成器send方法 迭代器

允我心安 提交于 2019-12-05 20:46:58
1 from collections import Iterable 2 from collections import Iterator 3 #如上篇博客所讲,生成器可以写成如下形式,当生成器被next()调用或循环,生成器运行到yield所在语句,yield后面紧跟变量将其值赋给yield,yield将其返回 4 def str_ip(ip_start): 5 for ip1 in range(256): 6 for ip2 in range(256): 7 for ip3 in range(256): 8 ip_str_format = "%s.%s.%s.%s"%(str(ip_start), str(ip1), str(ip2), str(ip3) ) 9 yield ip_str_format 10 return "this is iter done" #迭代器中此处的return是抛异常时候的值 11 12 #函数调用将其赋给一个变量,此时这个变量就是生成器 13 str_ip_gen = str_ip(66) 14 #使用生成器的next方法来获取数据 15 for i in range(30): 16 print(str_ip_gen.__next__()) 17 18 #下面代码使用迭代器的send方法从外面传值给yield达到并行运算的效果 19 def

设计模式之Memento(备忘机制)

无人久伴 提交于 2019-12-05 20:35:16
1、创建型模式 JDK1.5枚举Singleton 单例模式 AbstractFactory 工厂方法模式 简单工厂模式 Builder Prototype 2、结构型 java设计模式—Adapter模式 从Decorator,Adapter模式看Java的IO库 Bridge Composite Decorator 外观模式 Facade Pattern 享元模式 Flyweight Pattern 代理模式 3、行为型 职责链模式 Chain of Responsibility Pattern Java之命令模式(Command Pattern) Iterator ( JAVA迭代器与迭代模式 ) 调停者模式(Mediator) 设计模式之Memento(备忘机制) Observer State Strategy Visitor 原文作者: duanxz 原文地址:https://www.cnblogs.com/duanxz/p/3633475.html 来源: https://www.cnblogs.com/wjqhuaxia/p/11945718.html

Python函数高级

主宰稳场 提交于 2019-12-05 19:35:26
一、 闭包函数 闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用)。闭包指的是:函数内部函数对外部作用域而非全局作用域的引用。 def outter(x): x = 1 def inner(): print(x) return inner f = outter(2) f() # 1 f() # 1 f() # 1 # 查看闭包的元素 print(f.__closure__[0].cell_contents) # 1 闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得, 该函数无论在何处调用,优先使用自己外层包裹的作用域。 1、应用领域: 延迟计算(原来我们是传参,现在我们是包起来)、爬虫领域。 import requests def outter(url): def get(): response = requests.get(url) print(f"done: {url}") return get baidu = outter('https://www.baidu.com') python = outter('https://www.python.org') baidu() baidu() python() python() 二、 装饰器 装饰器指的是为被装饰器对象添加额外功能

迭代器

梦想的初衷 提交于 2019-12-05 19:27:36
双下方法print([1].__add__([2]))print([1]+[2]) 迭代器 l = [1,2,3] 索引 循环 for for i in l: i for k in dic: pass list dic str set tuple f = open() range() enumerate print(dir([])) #告诉我列表拥有的所有方法 ret = set(dir([]))&set(dir({}))&set(dir(''))&set(dir(range(10))) print(ret) #iterable print('__iter__' in dir(int)) print('__iter__' in dir(bool)) print('__iter__' in dir(list)) print('__iter__' in dir(dict)) print('__iter__' in dir(set)) print('__iter__' in dir(tuple)) print('__iter__' in dir(enumerate([]))) print('__iter__' in dir(range(1))) 只要是能被for循环的数据类型 就一定拥有__iter__方法 print([].__iter__())一个列表执行了__iter__(