circular_buffer 簡介及使用

circular_buffer 簡介及使用


版權聲明:本文為 cheng-zhi 原創文章,可以隨意轉載,但必須在明確位置注明出處!

什么是 circular_buffer ?

circular_buffer 中文意為環形緩沖區,這是一個固定大小的緩沖區,它被定義成一個環形,當緩沖區滿了后,新來的數據會覆蓋掉舊的數據。

它的形狀像下面這樣:

circular_buffer

基本實現原理

circular_buffer 的內部使用一塊連續的內存來保存數據,它類似于通過數組來實現。

基本使用方法

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

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.

// 現在只剩下元素 2

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

實際項目使用

在最近的開發中,項目要求將動態的數據顯示到表格中,最新的數據在表格最上面,老的數據在最下面,正好符合 circular_buffer 的使用場合,因此我們采用了 circular_buffer 這個數據結構并很好實現了這個功能,基本需求如下:

circular_buffer

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

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

基本工作流程:

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

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

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

原文地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容

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