2015-06-15 93 views
2

的源源不斷的數據結構我有時間戳數據,其中我想始終保持最後5秒的數據在緩衝源源不斷。 此外,我想提供用於提取的5秒給定的子區間的數據支持,所以像的時間戳數據

interval = buffer.extractData(startTime, endTime); 

性病什麼數據結構將是最合適的呢?

1),一個新的樣品推舊樣品從暗示,隊列將是一個很好的數據結構

2),我們必須要的任何元件的隨機存取這一事實,爲了得到這一事實子區間可能表明矢量是合適的。

此外,這將是展示的子區間給用戶的好辦法? 我的建議是使用兩個迭代器?

+0

也許稍微修改的環形緩衝器(其通常與載體狀數據結構在後端實施)? – twalberg

+0

如果要保留時間戳數據的* 5秒*,則不能依賴新數據推出舊數據,除非您有合成時間戳。 –

+0

@ gha.st謝謝您的評論,我意識到這一點,我的意思是推出舊數據將是一個頻繁的操作。 – user695652

回答

2

除非你是在代碼中的表現相當關鍵的部分,一個deque似乎合理。它可以增長和縮小以適應數據速率的變化,並對雙端隊列操作和隨機訪問具有合理的性能。

如果代碼是性能敏感(或者,更糟糕的,頂部有實時性要求,如許多時間戳緩衝區的情況下),你需要防止內存分配儘可能多地。您可以通過使用帶有預分配數組的環形緩衝區(通過unique_ptr<T[]>vector)以及在超過緩衝區大小時或者(爲組隊增加一個大小)丟棄元素來實現。

通過不會再減小尺寸,你的環形緩衝區可能會浪費一些內存,但要記住,在大多數情況下,內存是相當豐富的。

用兩個迭代器或一個範圍對象來表示間隔都很常見,雖然C++標準庫經常偏好迭代器,但是我個人的偏好是對於範圍對象,因爲它們(在我看來)有更好的可用性。