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指针插入数据。