circular_buffer
编程有时需要使用定长的容器(fixed size container)。实现旋转容器可以像下面这样:
std::vector<T> vec(size);
vec[i % size] = newelem;
但boost的circular_buffer提供更多功能,我们不需要重复造轮子了(DRY):
#include <boost/circular_buffer.hpp>
boost::circular_buffer<int> cb();
// Insert threee elements into the buffer.
cb.push_back();
std::cout << "1 inserted, size:" << cb.size() << endl;
std::cout << "latest is " << cb[cb.size() - ] << endl;
cb.push_back();
std::cout << "2 inserted, size:" << cb.size() << endl;
std::cout << "latest is " << cb[cb.size()-] << endl;
cb.push_back();
std::cout << "3 inserted, size:" << cb.size() << endl;
std::cout << "latest is " << cb[cb.size()-] << endl;
int a = cb[]; // a == 1
int b = cb[]; // b == 2
int c = cb[]; // c == 3
std::cout << "1st is" << a << endl;
std::cout << "2nd is" << b << endl;
// The buffer is full now, so pushing subsequent
// elements will overwrite the front-most elements.
cb.push_back(); // Overwrite 1 with 4.
std::cout << "4 inserted, size:" << cb.size() << endl;
std::cout << "latest is " << cb[cb.size()-] << endl;
cb.push_back(); // Overwrite 2 with 5.
std::cout << "5 inserted, size:" << cb.size() << endl;
std::cout << "latest is " << cb[cb.size()-] << endl;
// The buffer now contains 3, 4 and 5.
a = cb[]; // a == 3
b = cb[]; // b == 4
c = cb[]; // c == 5
std::cout << "1st is" << a << endl;
cb.pop_back(); // 5 is removed.
cb.pop_front(); // 3 is removed.
std::cout << "head and tail removed, size:" << cb.size() << endl;
std::cout << "latest is " << cb[cb.size() - ] << endl;
// Leaving only one element with value = 4.
int d = cb[]; // d == 4
circular_buffer的更多相关文章
- boost::circular_buffer
boost::circular_buffer的push_back分析 circular_buffer为了效率考虑,使用了连续内存块保存元素 使用固定内存,没有隐式或者非期望的内存分配 快速在cir ...
- [转] boost.circular_buffer简介
http://www.cnblogs.com/TianFang/archive/2013/02/05/2892503.html 很多时候,我们需要在内存中记录最近一段时间的数据,如操作记录等.由于这部 ...
- linux内核数据结构之kfifo
1.前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的.缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度.例如一个进程A产 ...
- 2015GitWebRTC编译实录12
2015.07.20 libjingle_peerconnection 编译通过[1382/1600 ] CXX obj/talk/app /webrtc/libjingle_peerconnecti ...
- C/C++ 开源库及示例代码
C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...
- Boost程序库完全开发指南——深入C++“准”标准库(第3版)
内容简介 · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...
- boost 循环缓冲区
boost 循环缓冲区 #include <boost/circular_buffer.hpp> int _tmain(int argc, _TCHAR* argv[]) { boost: ...
- Linux环境编程相关的文章
Linux环境编程相关的文章 好几年没有接触Linux环境下编程了,好多东西都有点生疏了.趁着现在有空打算把相关的一些技能重拾一下,顺手写一些相关的文章加深印象. 因为不是写书,也受到许多外部因素限制 ...
- Mesos源码分析(12): Mesos-Slave接收到RunTask消息
在前文Mesos源码分析(8): Mesos-Slave的初始化中,Mesos-Slave接收到RunTaskMessage消息,会调用Slave::runTask. void Slave::ru ...
随机推荐
- 浅谈sizeof
问题:1)sizeof是函数吗:2)sizeof功能:3)具体问题下sizeof值 1)sizeof不是函数,是C语言的一个关键字 2)sizeof作为右值时,求①某个数据类型(sizeof(int) ...
- 一步一步搭框架(asp.netmvc+easyui+sqlserver)-01
一步一步搭框架(asp.netmvc+easyui+sqlserver)-01 要搭建的框架是企业级开发框架,适用用企业管理信息系统的开发,如:OA.HR等 1.框架名称:sampleFrame. 2 ...
- C语言程序设计第四次作业
态度决定一切,我依然要说这句话,每次同学们提交的作业,我都会认真评阅,相比实验课而言,可以有更充足的时间来发现问题,很多同学的代码依然会存在一些语法错误或者考虑不周全的现象,我提出了,那么,你认真看了 ...
- Errore Http 404.2
问题一:IIS 7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理 404.2就一个http status code, 在msdn上说:404.2 - ISAPI or CGI rest ...
- Caliburn.Micro学习笔记目录——li-peng
Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 Caliburn.Micro学习笔记(二)----Actions Caliburn.Micro学习笔记(三)----事件聚合IE ...
- GSM Hacking Part① :使用SDR扫描嗅探GSM网络
0×00 写在开头 近期,发现Crazy Danish Hacker在YouTuBe发布了一个挺不错的教程视频:使用SDR嗅探监听GSM网络的通信流量(GSM Sniffing Teaser – So ...
- nodejs渲染模板
为什么要用nodejs来渲染? 之前前端的任务就是用HTML+CSS 来高保真的还原UI所设计原图,偶尔会使用少量的jq来对页面添加一些特效,页面还要交付给后端开发人员进行数据填充(php jsp)等 ...
- MVC 使用 Webuploader 插件 传递额外参数 备忘笔记
// 实例化 uploader = WebUploader.create({ pick: { id: '#filePicker-2', label: '点击选择图片' }, formData: { k ...
- jieba中文分词(python)
问题小结 1.安装 需要用到python,根据python2.7选择适当的安装包.先下载http://pypi.python.org/pypi/jieba/ ,解压后运行python setup.py ...
- viewBox A-Z滚动样式
效果图: 代码实现 (其中使用了ionic框架...) html 代码: <ion-content class='page-location'> <div class=' ...