Boost.circular_buffer用法详解

Boost.Circular_buffer维护了一块连续内存块作为缓存区,当缓存区内的数据存满时,继续存入数据就覆盖掉旧的数据。它是一个与STL兼容的容器,类似于 std::liststd::deque,并且支持随机存取。circular_buffer 被特别设计为提供固定容量的存储大小。当其容量被用完时,新插入的元素会覆盖缓冲区头部或尾部(取决于使用何种插入操作)的元素。

具体用法详见代码:

#include
#include
using namespace std;

#include   
using namespace boost;

typedef boost::circular_buffer CCircularBuffer;

  
void DispCirBuff(CCircularBuffer& oCircularBuffer){
	for(CCircularBuffer::iterator it = oCircularBuffer.begin(); it != oCircularBuffer.end(); it++){
		cout << setw(4) << (*it);
	}
	cout << endl << endl;
}

void main()
{
	CCircularBuffer oCircularBuffer(3);
	
	cout << "向环形缓冲区中顺序追加元素" << endl;
	oCircularBuffer.push_back(1); //front--->[1]<---back
	oCircularBuffer.push_back(2);//front--->[1][2]<---back
	oCircularBuffer.push_back(3);//front--->[1][2][3]<---back
	DispCirBuff(oCircularBuffer);
	//现在循环缓冲区已经满了,继续插入元素,将会覆盖最前面的元素

	cout << "成为缓冲区中的第一位元素,替换掉最后一个元素【向后推】" << endl;
	oCircularBuffer.push_front(4);//front--->[4][1][2][3]<---back	 
	DispCirBuff(oCircularBuffer);//front--->[4][1][2]<---back	【3】元素4替换了元素3

	cout << "成为缓冲区中的最后一位元素,替换掉第一个元素【向前推】" << endl;
	oCircularBuffer.push_back(5);//front--->[4][1][2][5]<---back	
	DispCirBuff(oCircularBuffer);//front--->[1][2][5]<---back	【4】元素5替换了元素4	

	cout << "移除缓冲区中的最后一位元素" << endl;
	oCircularBuffer.pop_back();//front--->[1][2]<---back
	DispCirBuff(oCircularBuffer);//【5】元素5被移除

	cout << "移除缓冲区中的第一位元素" << endl;
	oCircularBuffer.pop_front();//front--->[2]<---back
	DispCirBuff(oCircularBuffer);//【1】元素1被移除
}

运行结果如下:

Boost.circular_buffer用法详解_第1张图片

你可能感兴趣的:(Boost(开放的源码,强大的工具))