5.3.3.1 deque其它使用方式

在本节里提供了一些关于deque其它使用方式。

提供类似UNIX中的命令tail的功能,显示一个文件最后面一段文本:

def tail(filename, n=10):

‘返回文件最后的n行文本‘

with open(filename) as f:

return deque(f, n)

比如使用deque来计算一个移动平均数:

def moving_average(iterable, n=3):

# moving_average([40, 30, 50, 46, 39, 44]) --> 40.0 42.0 45.0 43.0

# http://en.wikipedia.org/wiki/Moving_average

it = iter(iterable)

d = deque(itertools.islice(it, n-1))

d.appendleft(0)

s = sum(d)

for elem in it:

s += elem - d.popleft()

d.append(elem)

yield s / n

移动平均线( Moving Average -MA) 也叫移动平均价, 是利用统计学上移动平均数的原理,将过去一定天数的证券,期货成交价格加以(加权)平均,连贯所得出的价位线。并根据其排列顺序、乘离、穿越、跌破等现象,来研究判进出场的时点。

使用rotate()来实现删除指定位置的元素:

def delete_nth(d, n):

d.rotate(-n)

d.popleft()

d.rotate(n)

蔡军生  QQ:9073204  深圳

时间: 2024-12-28 08:27:24

5.3.3.1 deque其它使用方式的相关文章

STL之序列容器deque

首先看看deque的模板声明: template <class T,  class Alloc = allocator<T>>  // 原本还有个参数BufSize,现在新版本内置了,不允许用户指定了. class deque { //… protected: // 数据成员 iterator start; // 表现第一个节点 iterator finish; // 表现最后一个节点 map_pointer map; // 指向map, map是块连续空间,其内的每个元素都是一个

deque双端队列容器

C++中的STL还是比较有用的,尤其是在做科研实现算法的时候,之前也有用过,但是没怎么系统地学过,因此最近找了本书,大致浏览了一下,叶志军的那本<C++ STL开发技术导引>,科普.入门性质的一本书,写得比较浅[呵呵,勿喷].下面的内容大部分是摘自该书. deque双端队列容器(double-ended queue),可以在尾部.头部插入.删除元素,采用分块的线性结构来存储数据,两个迭代器分别指向容器的首尾元素,以deque块为单位进行内存分配,使用二级的Map进行管理. 创建deque对象

慎重选择删除元素的方法

总结本条款,一共有以下几点是需要牢记的: 1.要删除容器中有特定值的所有对象: (1).如果容器是vector.string或deque,则使用erase-remove习惯用法. (2).如果容器是list,则使用list::remove (3).如果容器是标准关联容器,则使用它的erase成员函数. eg:  假定你有一个标注的STL容器c,它包含int类型的整数:Container<int> c; 而你想删除c中所有值为1963的元素.则可以使用erase-remove.习惯用法: c.e

deque双端队列容器(对象创建,数组、迭代器方式访问,元素的赋值、插入、删除等)

deque与vector非常相似,不仅可以在尾部插入和删除元素,还可以在头部插入和删除.不过当考虑到容器元素的内存分配策略和操作性能时,deque相对vector较为有优势. 头文件 #include<deque> 创建deque对象 1)deque();//创建一个没有任何元素的deque对象. deque<int> d 2)deque(size_typen);//创建一个具有n个元素的deque对象,每个元素采用它的类型下的默认值. deque<int> d(10)

这里想经过一个小程序研究标准库为 vector 对象提供的内存分配策,因为vector容器比list和deque容器用的很多,而且它的存储方式是连续的

我写一个简单的程序来区分vector容器size()和capacity()函数,这里capacity函数就是为vector容器预留了空间,不需要每次增添元素就要重新分配内存,这样效率上提高了很多,我通过一个间的小程序来研究,下面是程序和运行结果,比较简明可以看出capacity的大小都会比size大,因为size 指容器当前拥有的元素个数:而 capacity 则指容 器在必须分配新存储空间之前可以存储的元素总数.废话不多说,附上代码和运行结果:#include"stdafx.h" #

stl容器区别: vector list deque set map及底层实现

在STL中基本容器有: vector.list.deque.set.map set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问 set :集合, 用来判断某一个元素是不是在一个组里面,使用的比较少 map :映射,相当于字典 ,把一个值映射成另一个值,如果想创建字典的话使用它好了 底层采用的是树型结构,多数使用平衡二叉树实现 ,查找某一值是常数时间,遍历起来效果也不错, 只是每次插入值的时候,会重新构成底层的平衡二叉树,效率有一定影响. vector.list.dequ

STL源码分析--deque

一.deque的中控器 deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector.array无法成长,vector虽可成长,却只能向尾端成长,而且其所谓的成长原是个假象,事实上是(1)另觅更大空间:(2)将原数据复制过去:(3)释放原空间三部曲.如果不是vector每次配置新空间时都有留下一些余裕,其成长假象所带来的代价将是相当高昂. deque系由一段一段的定量连续空间构成.一旦有必要在deque的前端或尾端增加新空间,便配置一段定量连续空间,串接在整个d

nyoj1117 鸡蛋队列 (双端队列,deque)

题目1117 题目信息 运行结果 本题排行 讨论区 鸡蛋队列 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 将两根筷子平行的放在一起,就构成了一个队列.将带有编号的鸡蛋放到两根筷子之间叫做入队(push),将筷子之间的鸡蛋拿出来叫做出队(pop).但这两种方式有特殊的定义,对于入队,只能将鸡蛋从队列的尾部向里放入:对于出队,只能将鸡蛋从队列的头部向外将鸡蛋拿出来. 将①.②入队: 头____________尾                         ___

STL之deque

参见http://www.cplusplus.com/reference/deque/deque/ deque是双向开口的连续性存储空间.虽说是连续性存储空间,但这种连续性只是表面上的,实际上它的内存是动态分配的,它在堆上分配了一块一块的动态储存区,每一块动态存储区本身是连续的,deque自身的机制把这一块一块的存储区虚拟地连在一起. template < class T, class Alloc = allocator<T> > class deque; Double ended