circular_buffer是一块内存区域,当这块区塞满数据的时候,新数据会覆盖掉旧的数据。
类似于std::list 或者std::deque。支持随机访问,在头尾的插入和删除操作的耗时为常数,并且可以使用标准库的算法对其中的元素进行操作,如排序、求和等等。

circular_buffer被设计成固定容量的存储容器,新插入的元素会覆盖旧头部区域或者尾部区域的元素(取决于调用的插入函数)。

circular_buffer只在创建、显式调整容量或者需要赋值的时候才分配内存。

boost也提供了该容器的另一个版本circular_buffer_space_optimized。也是从circular_buffer而来的一个变体版本,这个版本在创建的时候并不分配内存,相反它在需要的时候才分配。

这种前瞻性地内存分配类似于std::vector的内存分配机制,随着当容量降低,自动释放内存。min_capacity表示最小的内存容量,分配的内存不能低于这个数。min_capacity的默认值为0,这个值可以通过构造函数或这成员函数set_capacity来修改。当然了这个版本读写速度要相应地慢一些。

原理

circular_buffer背后的写作目的就是创建一个能和STL无缝对接的容器。

另外,circular_buffer的设计遵循以下原则:

  1. 效率最大化
  2. 通用性
  3. 容器的行为尽可能地简单
  4. 能够通过改造进行定制化(如circular_buffer_space_optimized就是一个改造的例子)
  5. 易于调试

为了达到效率最大化, circular_buffer 和 circular_buffer_space_optimized 把元素存储在相邻的内存区域中,有以下几点好处:

  1. 使用固定大小的内存,没有隐式或者意料之外的内存分配
  2. 快速在容器的头部和尾部进行插入、删除操作
  3. 快速随机访问
  4. 适合对实时性和性能有要求的应用

circular buffer可能的应用场景有:

  1. 用新收到的数覆盖旧的数据的场景
  2. 对指定数目的元素进行某种缓存场景
  3. 高效的固定容量的先进先出场景
  4. 高效的固定容量的后进先出队列,当队列满的时候要删除头元素的场景

boost circular_buffer相关推荐

  1. 【C++】31. Boost::circular_buffer——循环缓冲区

    一.概述 Boost.Circular_buffer维护了一块连续内存块作为缓存区,当缓存区内的数据存满时,继续存入数据就覆盖掉旧的数据. 它是一个与STL兼容的容器,类似于 std::list或st ...

  2. boost circular_buffer的特性及应用

    文章目录 boost circular_buffer的特性及应用 boost circular_buffer的应用 circular_buffer实现的有界队列(消费生产者队列) circular_b ...

  3. 循环(环形)缓冲区之Boost::circular_buffer

    1. 简介 虽然STL中有queue和deque,但是他们是无限扩展大小的,如果想限定一个定量缓冲,就必须不停的pop操作,而且queue没有随机访问的操作.如果想要维护一个定长缓冲区,我们可以考虑使 ...

  4. 【C++】Boost::circular_buffer——循环缓冲区

    参考:Boost::circular_buffer--循环缓冲区 一.概述 Boost.Circular_buffer维护了一块连续内存块作为缓存区,当缓存区内的数据存满时,继续存入数据就覆盖掉旧的数 ...

  5. Boost库之circular_buffer

    Boost库之circular_buffer 原文:http://blog.csdn.net/byxdaz/article/details/71631470 Boost.Circular_buffer ...

  6. Boost:circular_buffer作为边界缓冲区的基础容器

    Boost:circular_buffer作为边界缓冲区的基础容器 实现功能 C++实现代码 实现功能 circular_buffer作为边界缓冲区的基础容器 C++实现代码 #include < ...

  7. Boost:循环缓冲区总和的测试程序

    Boost:循环缓冲区总和的测试程序 实现功能 C++实现代码 实现功能 循环缓冲区总和的测试程序 C++实现代码 #include <boost/circular_buffer.hpp> ...

  8. Boost:循环缓冲区迭代的测试程序

    Boost:循环缓冲区迭代的测试程序 实现功能 C++实现代码 实现功能 循环缓冲区迭代的测试程序 C++实现代码 #undef BOOST_CB_ENABLE_DEBUG #define BOOST ...

  9. Boost:circular buffer的测试程序

    Boost:circular buffer的测试程序 实现功能 C++实现代码 实现功能 circular buffer的测试程序 C++实现代码 #include <boost/circula ...

最新文章

  1. editplus 3 注册码
  2. QS最新世界大学排名发布,清华北大获史上最高名次
  3. vue 加载体验优化
  4. python机器学习案例系列教程——逻辑分类/逻辑回归LR/一般线性回归(softmax回归)
  5. Mac下Android Studio快捷键
  6. 【渝粤教育】广东开放大学 标准的研制与编制 形成性考核 (35)
  7. EDA课程设计代码汇总(信号发生器、抢答器、频率计、秒表、密码锁、计算器、VGA、PS2)
  8. reviewboard使用 与原理
  9. “区块链+供应链”的应用案例
  10. IT系统架构及架构体系详解
  11. 联想y7000电脑未正确启动_联想y7000wifi突然不能用了是怎么回事
  12. 双摄像头做slsm_刚刚考完!真实双机位复试经验帮你避雷!
  13. 自动驾驶技术——初学者笔记1:自动驾驶分级
  14. 区块链三加一:200个ETH在imToken上怎么没的?
  15. 笔记本电脑显示以太网未连接_如何向笔记本电脑添加以太网连接
  16. android手机连接hdmi,手机hdmi转接线的介绍以及连接方法
  17. C、C++、Java到Python,编程入门学习什么语言好?
  18. 熟练使用计算机word,计算机基础word2010上机操作.doc
  19. 华为设备配置MAC地址
  20. html中ol和li,HTML ol和li标签

热门文章

  1. pytorch manual_seed()
  2. parrot linux iso下载,Parrot Security OS 4.0发布下载,面向安全的操作系统
  3. Objective-C简介
  4. html怎么设置毛笔字体,原来毛笔字体是这么设计的!
  5. 界面今日头条:2018年中国旅游城市排行榜
  6. Python数据分析与可视化(基础知识)
  7. 用python绘制字符画
  8. BT源代码学习心得(九):客户端源代码分析(图形界面浅析) -- 转贴自 wolfenstein (NeverSayNever)
  9. 【星海出品】Horizon安装
  10. KSO-Sqlserver事务的实现