boost::circular_buffer的push_back简单分析
2017-06-12 10:16
621 查看
circular_buffer为了效率考虑,使用了连续内存块保存元素
使用固定内存,没有隐式或者非期望的内存分配
快速在circular_buffer头或者尾部插入,删除元素,并且是常量时间复杂度
常量时间访问元素
适合实时和对性能要求苛刻的应用
可能适用的场景
可存储最新接收到的samples,当更新的samples到来,覆写最老的元素
可用作底层容器实现固定大小buffer
可作为一种cache,保存一定数量的最新插入的元素
高效的固定大小先进先出队列
高效的后进先去队列,当队列满时,移除最老的元素(也就是第一个插入的元素)
push_back分析
当写一个已经满元素的circular_buffer,总是覆写最古老的元素。
circular_buffer头部和尾部都可以写入,内部使用了两个指针first,last来操作写入。
在初始化时候,first,last都指向了固定申请内存的开始。假定申请固定的buffer元素为N个。
buffer [0] [1] [2] ….[] [n-2] [n-1]
|
first
last
当不断使用push_back填充buffer,如下显示的是插入了n-1个元素,last始终指向下一个要插入的位置
buffer [0] [1] [2] ….[] [n-2] [n-1]
| |
first last
当插入了n个元素,队列满时last指针回转到头部,又与first指针相等了(如果没有使用pop_front读取过元素)。
buffer [0] [1] [2] ….[] [n-2] [n-1]
|
first
last
这时候再插入元素,first指向的元素buffer[0]就要被覆写了。
buffer [0] [1] [2] ….[] [n-2] [n-1]
|
first
last
如上图first指针也改变了,buffer[0]已经是最新的元素,buffer[1]才是最老的元素。
push_front与之类似,只不过是移动first指针插入数据。
4000
使用固定内存,没有隐式或者非期望的内存分配
快速在circular_buffer头或者尾部插入,删除元素,并且是常量时间复杂度
常量时间访问元素
适合实时和对性能要求苛刻的应用
可能适用的场景
可存储最新接收到的samples,当更新的samples到来,覆写最老的元素
可用作底层容器实现固定大小buffer
可作为一种cache,保存一定数量的最新插入的元素
高效的固定大小先进先出队列
高效的后进先去队列,当队列满时,移除最老的元素(也就是第一个插入的元素)
push_back分析
当写一个已经满元素的circular_buffer,总是覆写最古老的元素。
circular_buffer头部和尾部都可以写入,内部使用了两个指针first,last来操作写入。
在初始化时候,first,last都指向了固定申请内存的开始。假定申请固定的buffer元素为N个。
buffer [0] [1] [2] ….[] [n-2] [n-1]
|
first
last
当不断使用push_back填充buffer,如下显示的是插入了n-1个元素,last始终指向下一个要插入的位置
buffer [0] [1] [2] ….[] [n-2] [n-1]
| |
first last
当插入了n个元素,队列满时last指针回转到头部,又与first指针相等了(如果没有使用pop_front读取过元素)。
buffer [0] [1] [2] ….[] [n-2] [n-1]
|
first
last
这时候再插入元素,first指向的元素buffer[0]就要被覆写了。
buffer [0] [1] [2] ….[] [n-2] [n-1]
|
first
last
如上图first指针也改变了,buffer[0]已经是最新的元素,buffer[1]才是最老的元素。
push_front与之类似,只不过是移动first指针插入数据。
4000
相关文章推荐
- 最简单的push设置自定义backBarButtonItem(文字、图片、图文)
- boost.circular_buffer简介
- boost中circular_buffer存储字符串的使用示例
- 使用boost::circular_buffer_space_optimized实现OTL数据库连接池
- 使用boost::circular_buffer_space_optimized实现OTL数据库连接池
- boost.circular_buffer简介
- [转] boost.circular_buffer简介
- 菜鸟角度简单分析BP算法(Error Back Propagation)
- 环形缓冲区,魔戒lordrings,boost的circular_buffer
- boost中circular_buffer库使用,接口和STL中的deque,list类似
- Boost学习之循环缓冲区--circular_buffer
- Boost::circular_buffer——循环缓冲区
- Boost库 boost::circular_buffer、boost::ptr_vector
- boost::circular_buffer简介
- boost之circular_buffer
- STL源码分析之vector(二)—核心函数 push_back及insert_aux
- boost.circular_buffer简介
- vector::push_back 方法分析
- boost.circular_buffer简介
- Boost 之circular_buffer