您好,登錄后才能下訂單哦!
circular_buffer是什么及怎么使用,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
circular_buffer 簡介及使用
circular_buffer
中文意為環(huán)形緩沖區(qū),這是一個(gè)固定大小的緩沖區(qū),它被定義成一個(gè)環(huán)形,當(dāng)緩沖區(qū)滿了后,新來的數(shù)據(jù)會覆蓋掉舊的數(shù)據(jù)。
它的形狀像下面這樣:
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
一樣來使用它。
在最近的開發(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è)功能,基本需求如下:
要注意的是,因?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;
基本工作流程:
數(shù)據(jù)到來,新建一個(gè) std::vector<GridData>
類型并用新的數(shù)據(jù)初始化,然后 push_back
到 m_circularBuf
中
遍歷一次 m_circularBuf
,將其中的每個(gè) item: std::vector<GridData>
綁定到表格控件指定的一行上顯示。
如果你對這個(gè)需求有興趣,你可以通過后面的方式聯(lián)系我,我可以提供部分核心代碼 ^_^。
關(guān)于circular_buffer是什么及怎么使用問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(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)容。