Boost.Circular_buffer维护了一块连续内存块作为缓存区,当缓存区内的数据存满时,继续存入数据就覆盖掉旧的数据。

它是一个与STL兼容的容器,类似于 std::list或std::deque,并且支持随机存取。circular_buffer 被特别设计为提供固定容量的存储大小。当其容量被用完时,新插入的元素会覆盖缓冲区头部或尾部(取决于使用何种插入操作)的元素。逻辑存储结构如图

// 创建一个容量为3的循环缓冲区
boost::circular_buffer<int> cb(3);

这时里面是没有数据的:
cb.size() == 0;
cb.capacity()==3;
cb.empty()==true;
cb.full()==false;

// 插入一些元素到循环缓冲区
cb.push_back(1);

cb.size() == 1;
cb.capacity()==3;
cb.empty()==false;
cb.full()==false;

cb.push_back(2);

cb.size() == 2;
cb.capacity()==3;
cb.empty()==false;
cb.full()==false;

// 再插入其它元素
cb.push_back(3);

cb.size() == 3;
cb.capacity()==3;
cb.empty()==false;
cb.full()==true;

cb.push_back(4);

cb.size() == 3;
cb.capacity()==3;
cb.empty()==false;
cb.full()==true;
因为已到容量上限,所以数据4覆盖了旧数据1,并且begin()和end()都向前移一格。所以这时:
cb[0]==2;
cb[1]==3;
cb[2]==4;

我们也可以把它设想为一个定长的队列,当在队列满的情况下再向队尾放入数据时,就把队首“挤”出队列,反之亦然。

特有方法

方法 说明 示例
void rotate(const_iterator new_begin); 旋转 circular_buffer 中的元素。 在上例的最后(这时数据是:2,3,4)写:
cb.rotate(cb.begin()+1);
执行后内部数据是:3,4,2
size_type reserve() const; 取得可以插入到 circular_buffer 中而不覆写任何已存元素的最大元素数量。 返回结果==capacity() - size() ;
void set_capacity(capacity_type new_capacity); 修改 circular_buffer 的容量。 把上例中原3个空间改成5个:
cb.set_capacity(5);

参考:http://blog.sina.com.cn/s/blog_46d528490100lkux.html

深入:

http://blog.csdn.net/langeldep/article/details/8888582

boost circular buffer环形缓冲类的更多相关文章

  1. boost::Circular Buffer

    boost.circular_buffer简介 很多时候,我们需要在内存中记录最近一段时间的数据,如操作记录等.由于这部分数据记录在内存中,因此并不能无限递增,一般有容量限制,超过后就将最开始的数据移 ...

  2. Circular Buffer

    From:http://bradforj287.blogspot.com/2010/11/efficient-circular-buffer-in-java.html import java.util ...

  3. The Bip Buffer - The Circular Buffer with a Twist

    Introduction The Bip-Buffer is like a circular buffer, but slightly different. Instead of keeping on ...

  4. [Algorithm] Circular buffer

    You run an e-commerce website and want to record the last N order ids in a log. Implement a data str ...

  5. linux网络编程--Circular Buffer(Ring Buffer) 环形缓冲区的设计与实现【转】

    转自:https://blog.csdn.net/yusiguyuan/article/details/18368095 1. 应用场景 网络编程中有这样一种场景:需要应用程序代码一边从TCP/IP协 ...

  6. boost asio中io_service类的几种使用

    io_service类 你应该已经发现大部分使用Boost.Asio编写的代码都会使用几个io_service的实例.io_service是这个库里面最重要的类:它负责和操作系统打交道,等待所有异步操 ...

  7. boost::serialization 用基类指针转存派生类(错误多多,一波三折)

    boost::serialization 也支持c++的多态,这样我们就能够通过使用基类的指针来转存派生类, 我们接着上一篇( boost::serialization(2)序列化基类 )的样例来看: ...

  8. boost库----enable_shared_from_this类的作用和实现原理

    使用boost库时,经常会看到如下的类 class A:public enable_share_from_this<A> 在什么情况下要使类A继承enable_share_from_thi ...

  9. (七)boost库之单例类

    (七)boost库之单例类 一.boost.serialzation的单件实现 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一 ...

随机推荐

  1. 【MySql】脚本备份数据库

    #!/bin/bash #this is a script of mysql backup #Mysql="mysql" #MysqlDump="mysqldump&qu ...

  2. 关于Android Animation的setFillBefore、setFillAfter和setFillEnable

    1. 如果是独立的Animation,只有setFillAfter有效,设置为true动画结束后保持最后的状态 2. 如果是AnimationSet中的Animation,因为Animation的作用 ...

  3. Linux下面变量的疑问处

    SHLVL是Shell累加器的变量,具体请看下面 http://www.cnblogs.com/ziyunfei/p/4803832.html OLDPWD = old pwd(就是是之前一次的pwd ...

  4. 【代码备份】pocs.m

    超分辨率算法代码 POCS算法,凸集投影法. pocs.m,没有调用的代码,没看懂..只有这个函数..抱歉. function y = pocs(s,delta_est,factor) % POCS ...

  5. DBA面试题及解答

    一:SQL tuning 类 1:列举几种表连接方式答:merge join,hash join,nested loop Hash join散列连接是CBO 做大数据集连接时的常用方式,优化器使用两个 ...

  6. asynDBCenter(不断跟新)

    GameServer以前访问DBcenter时同步的,这样服务器都要等待DBcenter返回结果,经理在DBcenter和GameServer之间加了一个asynDBCenter,就实现了异步,感觉还 ...

  7. Android 全局异常处理(二)

    CrashHandler  package org.wp.activity; import java.io.File; import java.io.FileOutputStream; import ...

  8. 类似hibernate实现sql增删改错

    Util package utils; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Ha ...

  9. SpringMVC笔记——Spring+MyBatis组合开发简单实例

    简介 SSH框架很强大,适合大型项目开发.但学无止境,多学会一门框架组合开发会让自己增值许多. SSM框架小巧精致,适合中小型项目快速开发,对于新手来说也是简单上手的.在SSM框架搭建之前,我们先学习 ...

  10. 使用Servlet3.0新特性asyncSupported=true时抛异常java.lang.IllegalStateException: Not supported

    最近在运用Servlet3.0新特性:异步处理功能的时候出现以下了2个问题: 运行时会抛出以下两种异常: 一月 19, 2014 3:07:07 下午 org.apache.catalina.core ...