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 ...
随机推荐
- java之ubuntu12.04 开发环境配制
配置java开发环境,即安装jdk: 1.配置环境变量 ,更改/etc/profile文件:sudo gedit /etc/profile; 在文件最后加上如下几行(其实跟windows下的配置原理一 ...
- Codeforces Round #323 (Div. 1) A. GCD Table
A. GCD Table time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- jacon
com的线程回收不由java垃圾回收器进行处理,因此,每new一次jacob提供的类就要分配一定大小的内存给该操作,new出来的这个com对象在使用结束之后产生的垃圾java是无法回收的,new出来的 ...
- Linq Group By
TableA { Id int, Name string, Group int Score int } 从 Id Name Group Score 1 张三 A 70 2 李四 A 80 3 王五 ...
- 【转】jQuery获取Select option 选择的Text和Value
获取一组radio被选中项的值:var item = $('input[name=items][checked]').val();获取select被选中项的文本:var item = $(" ...
- Angular【学习笔记】
1.angular入门网站 感谢@菜鸟教程:http://www.runoob.com/angularjs/angularjs-tutorial.html 学习笔记:
- Linux内核分析——进程描述与创建
20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验内容 ...
- fushioncharts 使用教程要点---使用JSON数据方式
1.建立图表步骤: A.下载fushionChart,引入FusionCharts.js和FusionChartsExportComponent.js文件 B.建立图表对象 var chart1 = ...
- [转] 添加新的系统调用 _syscall0(int, mysyscall)
实验目的阅读 Linux 内核源代码,通过添加一个简单的系统调用实验,进一步理解Linux操作系统处理系统调用的统一流程.通过用kernel module的方法来实现一个系统调用实验,进一步理解Lin ...
- 字符数组和string判断是否为空行 NULL和0 namespace变量需要自己进行初始化
string 可以这样判断空行input !="" 字符数组可以通过判断第一个元素是否为空字符'\0',是的话为空行arrar[0]=='\0':或者用长度strlen(char ...