circular_buffer 簡介及使用

circular_buffer 簡介及使用


版權(quán)聲明:本文為 cheng-zhi 原創(chuàng)文章,可以隨意轉(zhuǎn)載,但必須在明確位置注明出處!

什么是 circular_buffer ?

circular_buffer 中文意為環(huán)形緩沖區(qū),這是一個固定大小的緩沖區(qū),它被定義成一個環(huán)形,當緩沖區(qū)滿了后,新來的數(shù)據(jù)會覆蓋掉舊的數(shù)據(jù)。

它的形狀像下面這樣:

circular_buffer

基本實現(xiàn)原理

circular_buffer 的內(nèi)部使用一塊連續(xù)的內(nèi)存來保存數(shù)據(jù),它類似于通過數(shù)組來實現(xiàn)。

基本使用方法

circular_buffer 的操作大多數(shù)都是放入數(shù)據(jù),取出數(shù)據(jù),所以常用下面 3 個函數(shù):

boost::circular_buffer<int> cb(3);

// 放入元素
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);

// 彈出尾部元素 3
cb.pop_back();  // 3 is removed.

// 彈出頭部元素 1
cb.pop_front(); // 1 is removed.

// 現(xiàn)在只剩下元素 2

因為 boost 封裝的很好,所以我們可以像使用 STL 一樣來使用它。

實際項目使用

在最近的開發(fā)中,項目要求將動態(tài)的數(shù)據(jù)顯示到表格中,最新的數(shù)據(jù)在表格最上面,老的數(shù)據(jù)在最下面,正好符合 circular_buffer 的使用場合,因此我們采用了 circular_buffer 這個數(shù)據(jù)結(jié)構(gòu)并很好實現(xiàn)了這個功能,基本需求如下:

circular_buffer

要注意的是,因為項目需求要求我們表格每一行都要顯示很多數(shù)據(jù),所以我們使用 vector 來存儲每一行的數(shù)據(jù),而 circular_buffer 里面存儲的是 vector 類型,也就是存儲一行數(shù)據(jù)。

// 我們定義的緩沖區(qū)實際類型,每個 item 代表表格的一行數(shù)據(jù)
boost::circular_buffer<std::vector<GridData>> m_circularBuf;

基本工作流程:

  1. 數(shù)據(jù)到來,新建一個 std::vector<GridData> 類型并用新的數(shù)據(jù)初始化,然后 push_backm_circularBuf
  2. 遍歷一次 m_circularBuf,將其中的每個 item: std::vector<GridData> 綁定到表格控件指定的一行上顯示。

如果你對這個需求有興趣,你可以通過后面的方式聯(lián)系我,我可以提供部分核心代碼 _

你需要學會使用 boost,即使不了解原理。

原文地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 本篇文章是基于谷歌有關(guān)Graphic的一篇概覽文章的翻譯:http://source.android.com/de...
    lee_3do閱讀 7,478評論 2 21
  • 簡介 在實際的軟件開發(fā)過程中,經(jīng)常會碰到如下場景: 某個模塊負責產(chǎn)生數(shù)據(jù),這些數(shù)據(jù)由另一個模塊來負責處理(此處的模...
    RadioWaves閱讀 6,491評論 2 16
  • 什么是asio::buffer 數(shù)據(jù)的發(fā)送與接收,均是以字節(jié)流形式進行處理的,這就需要一個內(nèi)存連續(xù)的存儲區(qū)域供讀取...
    長不胖的Garfield閱讀 8,897評論 0 3
  • (7.3)揣情者,必以其甚喜之時,往而極其欲也,其有欲也,不能隱其情;必以甚懼之時,往而極其惡也,其有惡也,不能隱...
    海納百川vs王者之風閱讀 297評論 0 0
  • 小朋友昨天數(shù)學單元小測,難得的考到100分,進小學以來屈指可數(shù),實在可喜可賀,因為在他回家之前,托管老師已經(jīng)告知了...
    05e357f628f8閱讀 469評論 0 0

友情鏈接更多精彩內(nèi)容