zoukankan      html  css  js  c++  java
  • BOOST 环形队列circular_buffer

    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

    实测, 实验现象 , 全部预测正确。

    .

    /************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/
  • 相关阅读:
    C++中Map的使用 (个人简单的对于String的使用)
    具体数学二项式至生成函数章-----致敬Kunth
    C++中String的使用
    C++中Set的使用
    费马小定理,欧拉函数
    数论---同余法则定理
    灵活利用单链表,顺带一提可持久化链表。
    第2章 数字之魅——数字中的技巧
    Mail.Ru Cup 2018 Round 1
    Lyft Level 5 Challenge 2018
  • 原文地址:https://www.cnblogs.com/happybirthdaytoyou/p/13837555.html
Copyright © 2011-2022 走看看