boost::circular_buffer
circular_buffer为了效率考虑,使用了连续内存块保存元素
- 使用固定内存,没有隐式或者非期望的内存分配
- 快速在circular_buffer头或者尾部插入,删除元素,并且是常量时间复杂度
- 常量时间访问元素
- 适合实时和对性能要求苛刻的应用
可能适用的场景
- 可存储最新接收到的samples,当更新的samples到来,覆写最老的元素
- 可用作底层容器实现固定大小buffer
- 可作为一种cache,保存一定数量的最新插入的元素
- 高效的固定大小先进先出队列
- 高效的后进先去队列,当队列满时,移除最老的元素(也就是第一个插入的元素)
push_back分析
在初始化时候,first,last都指向了固定申请内存的开始。假定申请固定的buffer元素为N个。
当不断使用push_back填充buffer,如下显示的是插入了n-1个元素,last始终指向下一个要插入的位置
当插入了n个元素,队列满时last指针回转到头部,又与first指针相等了(如果没有使用pop_front读取过元素)。
这时候再插入元素,first指向的元素buffer[0]就要被覆写了。
如上图first指针也改变了,buffer[0]已经是最新的元素,buffer[1]才是最老的元素。
push_front与之类似,只不过是移动first指针插入数据。
boost::circular_buffer的更多相关文章
- [转] boost.circular_buffer简介
http://www.cnblogs.com/TianFang/archive/2013/02/05/2892503.html 很多时候,我们需要在内存中记录最近一段时间的数据,如操作记录等.由于这部 ...
- circular_buffer
编程有时需要使用定长的容器(fixed size container).实现旋转容器可以像下面这样: std::vector<T> vec(size); vec[i % size] = n ...
- boost 循环缓冲区
boost 循环缓冲区 #include <boost/circular_buffer.hpp> int _tmain(int argc, _TCHAR* argv[]) { boost: ...
- Boost.Asio的使用技巧
基本概念 Asio proactor I/O服务 work类 run() vs poll() stop() post() vs dispatch() buffer类 缓冲区管理 I/O对象 socke ...
- boost range zhuan
Officialhttp://67.223.234.84/boost_doc/libs/range/doc/utility_class.html#sub_range http://blog.sina. ...
- boost 使用列子
#include <boost/lexical_cast.hpp>void test_lexical_cast(){ int number = 123; string str = &quo ...
- boost circular buffer环形缓冲类
Boost.Circular_buffer维护了一块连续内存块作为缓存区,当缓存区内的数据存满时,继续存入数据就覆盖掉旧的数据. 它是一个与STL兼容的容器,类似于 std::list或std::de ...
- boost::Circular Buffer
boost.circular_buffer简介 很多时候,我们需要在内存中记录最近一段时间的数据,如操作记录等.由于这部分数据记录在内存中,因此并不能无限递增,一般有容量限制,超过后就将最开始的数据移 ...
- boost circularBuffer
1. circular buffer has two fundamental properties: (1): The capacity of the circular buffer is const ...
随机推荐
- TYVJ P1074 武士风度的牛 Label:跳马问题
背景 农民John有很多牛,他想交易其中一头被Don称为The Knight的牛.这头牛有一个独一无二的超能力,在农场里像Knight一样地跳(就是我们熟悉的象棋中马的走法).虽然这头神奇的牛不能跳到 ...
- 【BZOJ】1303: [CQOI2009]中位数图(特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1303 依旧是题解流,,,不看题解没法活,,,第一眼就是瞎搞,然后就是暴力,显然TLE..题解啊题解. ...
- 关于后台管理linkbutton按钮几个重要属性的理解
<asp:LinkButton ID="lkbtnDelete" runat="server" CausesValidation="False& ...
- C/C++ 位运算符
C/C++位操作运算符 操作符 功能 用法 ~ 位求反 ~expr << 左移 expr1 << expr2 >> 右移 expr1 >> expr2 ...
- java 面向对象--------时间作业
编写Java应用程序.首先,定义一个时钟类——Clock,它包括三个int型 成员变量分别表示时.分.秒,一个构造方法用于对三个成员变量(时.分.秒) 进行初始化,还有一个成员方法show()用于显示 ...
- 将java的class文件放到一个指定文件夹下
用javac执行java文件时,要把java文件的class文件放到指定文件夹下,注意文件夹要创建好,执行javac -d 文件夹 ***.java 如图: 在class文件夹下就出现了L的class ...
- MUI - 手势
www.bcty365.com/content-146-2389-1.html 配置事件 mui.init({ gestureConfig: { hold: true, //长按屏幕,默认是false ...
- [转]Entity Framework4.0 (七) EF4的存储过程
本文转自:http://www.cnblogs.com/marksun/archive/2011/12/21/2296500.html 前面了解了EF4的CRUD的操作,你会发现EF4使用起来比较简单 ...
- [转]动态调用webservice时 ServiceDescriptionImporter类在vs2010无法引用的解决方法
本文转自:http://blog.csdn.net/limlimlim/article/details/8647038 [导读]ServiceDescriptionImporter是创建Web Ser ...
- JAVA WEB 的JSP(9*9乘法表+*型金字塔)
运行环境及工具: (Tomcat7) + (JAVA JDK)+ (Eclipse for J2EE) 输出9*9乘法表 代码片段的练习 增加一些简单的JS功能 <%@ page import= ...