boost circular_buffer
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的设计遵循以下原则:
- 效率最大化
- 通用性
- 容器的行为尽可能地简单
- 能够通过改造进行定制化(如circular_buffer_space_optimized就是一个改造的例子)
- 易于调试
为了达到效率最大化, circular_buffer
和 circular_buffer_space_optimized
把元素存储在相邻的内存区域中,有以下几点好处:
- 使用固定大小的内存,没有隐式或者意料之外的内存分配
- 快速在容器的头部和尾部进行插入、删除操作
- 快速随机访问
- 适合对实时性和性能有要求的应用
circular buffer可能的应用场景有:
- 用新收到的数覆盖旧的数据的场景
- 对指定数目的元素进行某种缓存场景
- 高效的固定容量的先进先出场景
- 高效的固定容量的后进先出队列,当队列满的时候要删除头元素的场景
boost circular_buffer相关推荐
- 【C++】31. Boost::circular_buffer——循环缓冲区
一.概述 Boost.Circular_buffer维护了一块连续内存块作为缓存区,当缓存区内的数据存满时,继续存入数据就覆盖掉旧的数据. 它是一个与STL兼容的容器,类似于 std::list或st ...
- boost circular_buffer的特性及应用
文章目录 boost circular_buffer的特性及应用 boost circular_buffer的应用 circular_buffer实现的有界队列(消费生产者队列) circular_b ...
- 循环(环形)缓冲区之Boost::circular_buffer
1. 简介 虽然STL中有queue和deque,但是他们是无限扩展大小的,如果想限定一个定量缓冲,就必须不停的pop操作,而且queue没有随机访问的操作.如果想要维护一个定长缓冲区,我们可以考虑使 ...
- 【C++】Boost::circular_buffer——循环缓冲区
参考:Boost::circular_buffer--循环缓冲区 一.概述 Boost.Circular_buffer维护了一块连续内存块作为缓存区,当缓存区内的数据存满时,继续存入数据就覆盖掉旧的数 ...
- Boost库之circular_buffer
Boost库之circular_buffer 原文:http://blog.csdn.net/byxdaz/article/details/71631470 Boost.Circular_buffer ...
- Boost:circular_buffer作为边界缓冲区的基础容器
Boost:circular_buffer作为边界缓冲区的基础容器 实现功能 C++实现代码 实现功能 circular_buffer作为边界缓冲区的基础容器 C++实现代码 #include < ...
- Boost:循环缓冲区总和的测试程序
Boost:循环缓冲区总和的测试程序 实现功能 C++实现代码 实现功能 循环缓冲区总和的测试程序 C++实现代码 #include <boost/circular_buffer.hpp> ...
- Boost:循环缓冲区迭代的测试程序
Boost:循环缓冲区迭代的测试程序 实现功能 C++实现代码 实现功能 循环缓冲区迭代的测试程序 C++实现代码 #undef BOOST_CB_ENABLE_DEBUG #define BOOST ...
- Boost:circular buffer的测试程序
Boost:circular buffer的测试程序 实现功能 C++实现代码 实现功能 circular buffer的测试程序 C++实现代码 #include <boost/circula ...
最新文章
- editplus 3 注册码
- QS最新世界大学排名发布,清华北大获史上最高名次
- vue 加载体验优化
- python机器学习案例系列教程——逻辑分类/逻辑回归LR/一般线性回归(softmax回归)
- Mac下Android Studio快捷键
- 【渝粤教育】广东开放大学 标准的研制与编制 形成性考核 (35)
- EDA课程设计代码汇总(信号发生器、抢答器、频率计、秒表、密码锁、计算器、VGA、PS2)
- reviewboard使用 与原理
- “区块链+供应链”的应用案例
- IT系统架构及架构体系详解
- 联想y7000电脑未正确启动_联想y7000wifi突然不能用了是怎么回事
- 双摄像头做slsm_刚刚考完!真实双机位复试经验帮你避雷!
- 自动驾驶技术——初学者笔记1:自动驾驶分级
- 区块链三加一:200个ETH在imToken上怎么没的?
- 笔记本电脑显示以太网未连接_如何向笔记本电脑添加以太网连接
- android手机连接hdmi,手机hdmi转接线的介绍以及连接方法
- C、C++、Java到Python,编程入门学习什么语言好?
- 熟练使用计算机word,计算机基础word2010上机操作.doc
- 华为设备配置MAC地址
- html中ol和li,HTML ol和li标签
热门文章
- pytorch manual_seed()
- parrot linux iso下载,Parrot Security OS 4.0发布下载,面向安全的操作系统
- Objective-C简介
- html怎么设置毛笔字体,原来毛笔字体是这么设计的!
- 界面今日头条:2018年中国旅游城市排行榜
- Python数据分析与可视化(基础知识)
- 用python绘制字符画
- BT源代码学习心得(九):客户端源代码分析(图形界面浅析) -- 转贴自 wolfenstein (NeverSayNever)
- 【星海出品】Horizon安装
- KSO-Sqlserver事务的实现