BOOST庫的環形佇列比較靈活,前插或后插,洗掉隊首或洗掉隊尾元素,都支持,
只貼代碼:
#include <boost/circular_buffer.hpp>
#include <numeric>
#include <assert.h>
#include <iostream>
using namespace std;
class C_usrdata{
public:
int x;
int y;
};
void DispCirBuff(boost::circular_buffer<C_usrdata> &oCircularBuffer){
for(boost::circular_buffer<C_usrdata>::iterator it=oCircularBuffer.begin(); it!=oCircularBuffer.end(); it++){
cout << (*it).x << " " << (*it).y << endl;
}
cout << endl;
}
int main(int argc, char*argv[])
{
// 創建一個容量為3的回圈緩沖區
boost::circular_buffer<C_usrdata> cb(3);
// 插入一些元素到回圈緩沖區
C_usrdata data1 = {1, 1.34};
C_usrdata data2 = {2, 2.34};
cb.push_back(data1);
cb.push_back(data2);
// 斷言
cout << cb[0].y << endl;
assert(!cb.full());
assert(cb.size() == 2);
assert(cb.capacity() == 3);
cout << " running ok" << endl;
// 再插入其它元素
C_usrdata data3 = {3, 3.34};
cb.push_back(data3);
cout << "佇列已經滿時,繼續插入元素 -- 實驗" << endl;
C_usrdata data4 = {4, 4.34};
cb.push_back(data4);
// 當佇列已經滿時,繼續插入元素,最前面的元素將會被擠出去,
// 預測:此時佇列中的資料從前往后,應該是: data2 data3 data4
DispCirBuff(cb);
cout << "向佇列頭插入一個元素,ps:這是形成向后推的效果,如果之前佇列已經滿了,那么最后一個元素將被移出," << endl;
C_usrdata data5 = {5, 5.55};
cb.push_front(data5);
DispCirBuff(cb);
// 預測:此時佇列中的資料從前往后,應該是: data5 data2 data3
cout << "向佇列尾插入一個元素,ps:這是形成向前推的效果, 如果之前佇列已經滿了,那么第一個元素將被移出," << endl;
C_usrdata data6 = {6, 6.66};
cb.push_back(data6);
DispCirBuff(cb);
// 預測:此時佇列中的資料從前往后,應該是: data2 data3 data6
cout << "移除緩沖區中的最后一位元素" << endl;
cb.pop_back();
DispCirBuff(cb);
cout << cb.size() << endl << endl;
// 預測:此時佇列中的資料從前往后,應該是: data2 data3
cout << "移除緩沖區中的第一位元素" << endl << endl;
cb.pop_front();
DispCirBuff(cb);
cout << cb.size() << endl << endl;
// 預測:此時佇列中的資料從前往后,應該是: data2
return 0;
}
makefile:
.PHONY: DOIT
DOIT:
mips-linux-gnu-g++ -I. my_boost_test.cpp -L./lib -lboost_thread -lboost_system -o boost_app -lrt -lpthread
實測, 實驗現象 , 全部預測正確,
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/179024.html
標籤:其他
下一篇:BOOST庫 訊息佇列
