迭代器

学习:STL概念学习

元气小坏坏 提交于 2019-11-28 11:44:35
STL初识: 为了建立数据结构和算法的一套标准,诞生了STL STL基本概念: STL(Standard Template Library,标准模板库) STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator) 容器和算法之间通过迭代器进行无缝连接。 STL 几乎所有的代码都采用了模板类或者模板函数 STL六大组件: STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器 1、容器: 各种数据结构,如vector、list、deque、set、map等,用来存放数据。 2、算法: 各种常用的算法,如sort、find、copy、for_each等 3、迭代器: 扮演了容器与算法之间的胶合剂。 4、仿函数: 行为类似函数,可作为算法的某种策略。 5、适配器: 一种用来修饰容器或者仿函数或迭代器接口的东西。 6、空间配置器: 负责空间的配置与管理。 STL中的容器: 容器: 置物之所也 STL容器就是将运用最广泛的一些数据结构实现出来 常用的数据结构:数组, 链表,树, 栈, 队列, 集合, 映射表等 这些容器分为 序列式容器 和 关联式容器 两种: 序列式容器: 强调值的排序,序列式容器中的每个元素均有固定的位置。 关联式容器: 二叉树结构,各元素之间没有严格的物理上的顺序关系 STL中的算法: 算法

学习:容器算法迭代器

半腔热情 提交于 2019-11-28 11:42:43
vector存放内置数据类型: 容器: vector 算法: for_each 迭代器: vector ::iterator 示例代码: #include<iostream> #include<algorithm> #include<string> #include<vector> using namespace std; //第三种方法需要的函数 void toprint(int val) { cout << val << endl; //其实我们可以看下for_each的定义中实现的 //for (; _UFirst != _ULast; ++_UFirst) //{ // _Func(*_UFirst); 把传入的函数进行了调用,func传入的是* //} } void test01() { vector<int> v; //创建一个int类型的vector容器 v.push_back(10); //放入相应的数值 v.push_back(20); v.push_back(30); v.push_back(40); //第一种方式进行遍历容器中的数值 //vector<int>::iterator 拿到vector<int>这种容器的迭代器类型 //vector<int>::iterator pBegin = v.begin(); //v.begin()返回迭代器

yield迭代器的使用

人盡茶涼 提交于 2019-11-28 11:37:29
class Program { static void Main(string[] args) { List<Student> students = new List<Student>(); for (int i = 0; i < 10; i++) { students.Add(new Student() { Age = i, Name = "名字" + i }); } { Console.WriteLine("********************未使用迭代器 Start*****************************"); List<Student> query = students.WhereNoYield(s => { Thread.Sleep(300); return s.Age > 0; }); foreach (var item in query) { Console.WriteLine($"{DateTime.Now} - {item.Age} - {item.Name}"); } Console.WriteLine("********************未使用迭代器 End*****************************"); } { Console.WriteLine("********************使用迭代器 Start**

生成器和迭代器

自作多情 提交于 2019-11-28 10:28:07
Generator生成器函数 Generator函数是ES2015提出的异步的解决方案,与普通的函数有很大的不同; 特点: (1)generator函数与普通函数不同,普通函数一旦调用就会执行完,但是generator函数中间可以暂停,执行一会歇一会。 (2)在function关键字后面跟一个(*)号; (3)在函数体内部使用yield表达式作为一个状态,实现暂停; (4)generator函数执行并不会有什么效果,而是返回一个迭代器对象,之后调用迭代器的next方法会返回一个值对象。 举例说明: function *go(a){ console.log(1); //yield语句只是标识符,并没有返回值 //yield左边等于next()传来的参数值,没传参则为undefined,yield右边是next()的返回值 let b=yield a; console.log(2); let c=yield b; console.log(3); return c; } let iterator=go('aaa'); let r1=iterator.next();//第一次next()不用传参 console.log(r1);// 1 {value: "aaa", done: false} let r2=iterator.next('bbb'); console.log(r2);//2

day13

大城市里の小女人 提交于 2019-11-28 09:50:15
闭包函数 闭包函数是函数传参的一种方式。它可以把变量和函数一起包起来,下次要直接调用 我们先来看一下普通的传参方式: def inner(x): print(x) inner(1) inner(1) inner(1) 看上去好像也蛮简单的,但是如果你要传递的值会很多呢,比如要传递摸一个复杂的网址,那么就会变成: inner(https://image.baidu.com/search/detailct=503316480&z=undefined&tn=baiduimagedetail&ipn=d&word=python&step_word=&ie=utf8&in=&cl=2&lm=-1&st=undefined&hd=undefined&latest=undefined&copyright=undefined&cs=2274312350,3438054066&os=1842179554,428481594&simid=4207124190,751379936&pn=4&rn=1&di=93940&ln=1299&fr=&fmq=1565592554366_R&fm=&ic=undefined&s=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&is=0,0&istype=0&ist=

设计模式之----组合模式

空扰寡人 提交于 2019-11-28 08:38:30
设计模式之组合模式 组合模式相关总结 组合模式案例一(餐馆子菜单) 组合模式案例二(目录结构) 组合模式相关总结 在学习的时候看到一个写的 非常好的博客 ,可以好好学习一下。 组合模式为处理树形结构提供了一种较为完美的解决方案,它描述了如何将容器和叶子进行递归组合, 使得用户在使用时无须对它们进行区分 ,可以一致地对待容器和叶子。 组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。 组合模式的关键是定义了一个抽象构件类(Component),它既可以代表叶子(Leaf),又可以代表容器(中间的),而客户端针对该抽象构件类进行编程,无须知道它到底表示的是叶子还是容器,可以对其进行统一处理。 这种组合模式正是应树形结构而生,所以组合模式的使用场景就是出现树形结构的地方。比如:文件目录显示,多及目录呈现等树形结构数据的操作。 Java中的Swing组件: 在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。 使用场景: 在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异

LC 752 Open the Lock

两盒软妹~` 提交于 2019-11-28 08:08:34
由于这个问题,涉及了很多知识,例如数据结构里面的哈希表,c++中的迭代器,因此,需要对于每一个疑惑逐一击破。 问题描述 You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' . The wheels can rotate freely and wrap around: for example we can turn '9' to be '0' , or '0' to be '9' . Each move consists of turning one wheel one slot. The lock initially starts at '0000' , a string representing the state of the 4 wheels. You are given a list of deadends dead ends, meaning if the lock displays any of these codes, the wheels of the lock will stop turning and you will be unable to open

python术语对照表

Deadly 提交于 2019-11-28 07:42:32
术语对照表 >>> 交互式终端中默认的 Python 提示符。往往会显示于能以交互方式在解释器里执行的样例代码之前。 ... 交互式终端中输入特殊代码行时默认的 Python 提示符,包括:缩进的代码块,成对的分隔符之内(圆括号、方括号、花括号或三重引号),或是指定一个装饰器之后。 2to3 一个将 Python 2.x 代码转换为 Python 3.x 代码的工具,能够处理大部分通过解析源码并遍历解析树可检测到的不兼容问题。 2to3 包含在标准库中,模块名为 lib2to3 ;并提供一个独立入口点 Tools/scripts/2to3 。参见 2to3 - 自动将 Python 2 代码转为 Python 3 代码 。 abstract base class -- 抽象基类 抽象基类简称 ABC,是对 duck-typing 的补充,它提供了一种定义接口的新方式,相比之下其他技巧例如 hasattr() 显得过于笨拙或有微妙错误(例如使用 魔术方法 )。ABC 引入了虚拟子类,这种类并非继承自其他类,但却仍能被 isinstance() 和 issubclass() 所认可;详见 abc 模块文档。Python 自带许多内置的 ABC 用于实现数据结构(在 collections.abc 模块中)、数字(在 numbers 模块中)、流(在 io 模块中)、导入查找器和加载器

C#8.0——异步流(AsyncStream)

前提是你 提交于 2019-11-28 07:08:05
原文: C#8.0——异步流(AsyncStream) 异步流(AsyncStream) 原文地址: https://github.com/dotnet/roslyn/blob/master/docs/features/async-streams.md 注意:以下内容最好能根据反编译工具查看异步流相关类生成的代码效果最佳 异步流是可枚举类(Enumerable)的异步变体,它会在遍历下一个元素的时候(Next)会涉及异步操作。只要继承自 IAsyncEnumerable 就能实现。 首先我们来看下这些在 .netcore3.0 新增的异步流 API namespace System.Collections.Generic { public interface IAsyncEnumerable<out T> { IAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancellationToken = default); } public interface IAsyncEnumerator<out T> : IAsyncDisposable { T Current { get; } ValueTask<bool> MoveNextAsync(); } } namespace System { public

集合

淺唱寂寞╮ 提交于 2019-11-28 06:23:25
集合 回顾 常用类: 1 Date 表示一个瞬间时间 Date date=new Date(); 2 Calendar类日历 Calendar calendar=Calender.getInstance(); calendar.get(Calendar.YEAR); calendar.get(Calender.MONTH); calender.set(); 3 SimpleDateFormat:实现时间和字符串之间的转换。 3.1把日期格式的字符串转成 时间对象 String s="2011-10-1"; SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); Date date=df.parse(s); 3.2把时间转成某种格式的字符串 // 2015/10/1 SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd"); String s=df.format(date); 4 Math数学类 pow(a,b) a的b次方 abs();绝对值 round();四舍五入 random();随机数 0-1 sqrt(); cbrt(); ceil(); //返回大于或等于 参数的最小整数 3.4--> 4 5.0--->5 floor(); //返回小于或等于参数最大整数 2.8