“人造太阳”计划

c++中set的用法

大兔子大兔子 提交于 2019-11-30 03:33:49
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。 关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。 关于set有下面几个问题: (1)为何map和set的插入删除效率比用其他序列容器高? 大部分人说,很简单,因为对于关联容器来说,不需要做内存拷贝和内存移动。说对了,确实如此。set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多

C++ - STL - map的基础操作

别来无恙 提交于 2019-11-30 03:25:17
STL - map常用方法 map简述 map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,其作用类似于python之中的字典,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。 map的基本操作函数: | 方法 | 作用 | | | | ---------------- | ------------------------------- | | | | begin() | 返回指向map头部的迭代器 | | | | clear() | 删除所有元素 | | | | count() | 返回指定元素出现的次数 | | | | empty() | 如果map为空则返回true | | | | end() | 返回指向map末尾的迭代器 | | | | equal_range() | 返回特殊条目的迭代器对 | | | | erase() | 删除一个元素 | | | | find() | 查找一个元素 | | | | get_allocator() | 返回map的配置器 | |

Python中和迭代有关的两个函数next()和iter()

我的未来我决定 提交于 2019-11-30 02:36:55
   next():   next()返回迭代器的下一个项目   next语法: next(iterator[,dafault])   iterator -- 可迭代对象   default -- 可选,用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发 StopIteration 异常。   e.g.: 1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 4 # 首先获得Iterator对象: 5 it = iter([1, 2, 3, 4, 5]) 6 # 循环: 7 while True: 8 try: 9 # 获得下一个值: 10 x = next(it) 11 print(x) 12 except StopIteration: 13 # 遇到StopIteration就退出循环 14 break       iter():    iter()函数用来生成迭代器   iter语法: iter(object[, sentinel])   object -- 支持迭代的集合对象。    sentinel -- 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object。   e

【第十四篇】Python 迭代器

 ̄綄美尐妖づ 提交于 2019-11-30 00:31:28
一、迭代器 迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 1.1 判断一个对象是否可迭代 可以使用 isinstance() 判断一个对象是否是 Iterable 对象: In [50]: from collections import Iterable In [51]: isinstance([], Iterable) Out[51]: True In [52]: isinstance({}, Iterable) Out[52]: True In [53]: isinstance('abc', Iterable) Out[53]: True In [54]: isinstance(mylist, Iterable) Out[54]: False In [55]: isinstance(100, Iterable) Out[55]: False 1.2 可迭代对象的本质 我们分析对可迭代对象进行迭代使用的过程,发现每迭代一次(即在for...in...中每循环一次)都会返回对象中的下一条数据,一直向后读取数据直到迭代了所有数据后结束。那么,在这个过程中就应该有一个“人”去记录每次访问到了第几条数据,以便每次迭代都可以返回下一条数据。我们把这个能帮助我们进行数据迭代的“人

Pytorch Sampler详解

∥☆過路亽.° 提交于 2019-11-30 00:02:12
关于为什么要用Sampler可以阅读 一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系 。 本文我们会从源代码的角度了解Sampler。 Sampler 首先需要知道的是所有的采样器都继承自 Sampler 这个类,如下: 可以看到主要有三种方法:分别是: __init__ : 这个很好理解,就是初始化 __iter__ : 这个是用来产生迭代索引值的,也就是指定每个step需要读取哪些数据 __len__ : 这个是用来返回每次迭代器的长度 class Sampler(object): r"""Base class for all Samplers. Every Sampler subclass has to provide an __iter__ method, providing a way to iterate over indices of dataset elements, and a __len__ method that returns the length of the returned iterators. """ # 一个 迭代器 基类 def __init__(self, data_source): pass def __iter__(self): raise NotImplementedError def _

python 递归函数

天涯浪子 提交于 2019-11-29 22:05:15
递归函数 阅读: 115067 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘 n! = 1 x 2 x 3 x ... x n ,用函数 fact(n) 表示,可以看出: fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n 所以, fact(n) 可以表示为 n x fact(n-1) ,只有n=1时需要特殊处理。 于是, fact(n) 用递归的方式写出来就是: def fact(n): if n==1: return 1 return n * fact(n - 1) 上面就是一个递归函数。可以试试: >>> fact(1) 1 >>> fact(5) 120 >>> fact(100) 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000L 如果我们计算 fact(5) ,可以根据函数定义看到计算过程如下: ===> fact(5) ===> 5 * fact(4

python之路——迭代器和生成器

牧云@^-^@ 提交于 2019-11-29 21:31:19
阅读目录   楔子   python中的for循环   可迭代协议   迭代器协议   为什么要有for循环   初识生成器   生成器函数   列表推导式和生成器表达式   本章小结   生成器相关的面试题 返回顶部 楔子 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,有几种方式? 首先,我可以通过索引取值l[0],其次我们是不是还可以用for循环来取值呀? 你有没有仔细思考过,用索引取值和for循环取值是有着微妙区别的。 如果用索引取值,你可以取到任意位置的值,前提是你要知道这个值在什么位置。 如果用for循环来取值,我们把每一个值都取到,不需要关心每一个值的位置,因为只能顺序的取值,并不能跳过任何一个直接去取其他位置的值。 但你有没有想过,我们为什么可以使用for循环来取值? for循环内部是怎么工作的呢? 迭代器 返回顶部 python中的for循环 要了解for循环是怎么回事儿,咱们还是要从代码的角度出发。 首先,我们对一个列表进行for循环。 for i in [1,2,3,4]: print(i) 上面这段代码肯定是没有问题的,但是我们换一种情况,来循环一个数字1234试试 for i in 1234 print(i) 结果: Traceback (most recent call last): File "test.py",

内置函数

我与影子孤独终老i 提交于 2019-11-29 19:24:27
abs() 函数 abs() 函数返回数字的绝对值。 print("abs(-40) : ", abs(-40)) print("abs(100.10) : ", abs(100.10)) ''' 输出结果 abs(-40) : 40 abs(100.10) : 100.1 ''' dict() 函数 dict() 函数用于创建一个字典。 print(dict()) # 创建空字典 print(dict(a='a', b='b', t='t')) # 传入关键字 print(dict(zip(['one', 'two', 'three'], [1, 2, 3]))) # 映射函数方式来构造字典 print(dict([('one', 1), ('two', 2), ('three', 3)])) # 可迭代对象方式来构造字典 ''' 输出结果 {} {'a': 'a', 'b': 'b', 't': 't'} {'one': 1, 'two': 2, 'three': 3} {'one': 1, 'two': 2, 'three': 3} ''' help() 函数 help() 函数用于查看函数或模块用途的详细说明。 help('sys') # 查看 sys 模块的帮助 help('str') # 查看 str 数据类型的帮助 a = [1, 2, 3] help(a) #

[C++] epoll server实例

扶醉桌前 提交于 2019-11-29 19:11:36
// IO多路复用,事件驱动+非阻塞,实现一个线程完成对多个fd的监控和响应,提升CPU利用率 // epoll优点: // 1.select需要每次调用select时拷贝fd,epoll_ctl拷贝一次,epoll_wait就不需要重复拷贝 // 2.不需要像select遍历fd做检查,就绪的会被加入就绪list,遍历list完成处理 // 3.没有最大连接限制,与最大文件数目相关:cat /proc/sys/fs/file-max,与内存相关 // epoll实现相关: // 1.epoll_ctl,将fd的event使用RB tree保存,读写O(logN); // 2.一旦有event,内核负责添加到rdlist链表 // 3.epoll_wait检查链表看是否有事件,并进行处理 // Ref // https://www.cnblogs.com/lojunren/p/3856290.html // http://blog.chinaunix.net/uid-28541347-id-4273856.html // Question: // 是否需要每个event一个实例? #include <cstdlib> /* exit() */ #include <cstdio> /* perror(): 打印信息+发生错误的原因,可用于定位。 */ #include

PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)

跟風遠走 提交于 2019-11-29 19:09:06
前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. list这种序列类的一大特点:切片。和如何实现可切片对象。到如何自定义一个序列类。 5. biset维护排序序列 6. 什么时候使用list 7.列表推导式、生成器表达式、字典推导式 1.python中的序列类分类 a.什么是python的序列类? 之前提到的魔法函数这种时候就很重要啦。满足序列类相关的协议就称为python里的序列类。python内置的序列类有dict、tuple、list等。 而我们自定义序列类的话,由于魔法函数的存在。序列的相关魔法方法允许我们自己创建的类拥有序列的特性,让其使用起来就像 python 的内置序列。 b.python按分类来看有哪些序列类? - 容器序列:list,tuple,deque(可以放任意的类型的容器) - 扁平序列:str,bytes,bytearray,array.array(可以使用 for循环遍历的) - 可变序列:list,deque,bytearray,array - 不可变:str,tuple,bytes ps.这里推荐一本书 fluent python Python标准库提供了大量使用C来实现的序列类型,