溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

circular_buffer是什么及怎么使用

發(fā)布時(shí)間:2021-11-10 09:34:01 來源:億速云 閱讀:190 作者:柒染 欄目:大數(shù)據(jù)

circular_buffer是什么及怎么使用,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

circular_buffer 簡介及使用

什么是 circular_buffer ?

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

它的形狀像下面這樣:

circular_buffer是什么及怎么使用

基本實(shí)現(xiàn)原理

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

基本使用方法

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

boost::circular_buffer<int> cb(3);// 放入元素cb.push_back(1);
cb.push_back(2);
cb.push_back(3);// 彈出尾部元素 3cb.pop_back();  // 3 is removed.// 彈出頭部元素 1cb.pop_front(); // 1 is removed.// 現(xiàn)在只剩下元素 2

因?yàn)?boost 封裝的很好,所以我們可以像使用 STL 一樣來使用它。

實(shí)際項(xiàng)目使用

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

circular_buffer是什么及怎么使用

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

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

基本工作流程:

  1. 數(shù)據(jù)到來,新建一個(gè) std::vector<GridData> 類型并用新的數(shù)據(jù)初始化,然后 push_backm_circularBuf

  2. 遍歷一次 m_circularBuf,將其中的每個(gè) item: std::vector<GridData> 綁定到表格控件指定的一行上顯示。

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

關(guān)于circular_buffer是什么及怎么使用問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI