2010-11-09 33 views
0

考慮:爲定時採樣命名循環緩衝區類?

class Buf { 
    // has fixed buffer size, forming a cyclic buffer tor t->v pairs 
    void add(time_type t, value_type v); // adds value v at time t, overwriting the oldest buffered value 
    value_type get(time_type t); // returns the value at time t1 for t1 <= t < t2 (for t1 and t2 datapoints in the buffer) 
    ... 
}; 

什麼,你會調用這個類?

我承認這在某種程度上是主觀的,但它不應該導致或需要擴展討論答案,所以我希望它是好的。因爲類圖(最近)的時間戳對應於這些時間戳值:-)


到目前爲止,我在想RecentValueBuffer。我對「近期」有點不確定,因爲這似乎意味着短時間/數量的樣本。

回答

3

您應該問自己,該類的用戶是否需要知道或關心內部實現是循環緩衝區。如果沒有,請說出一些說明該課程目的的內容:可能類似於TimeMap,因爲它似乎將值映射到離散時間點。然後,您可以隨時將內部實現更改爲其他(如哈希表),而無需更改類的名稱。

如果它對於語義非常重要,它總是一個循環緩衝區,那麼考慮將它作爲通用容器CircularBuffer等,並使用模板來定義鍵和值的類型。

0

CircularBuffer or RingBuffer

我最近寫了一個用於保持移動平均值(稱爲RunningAverage),並提到它我的意見爲「環形緩衝區」,所以我顯然這是我的偏好。 :)可能是因爲它更短。

1

的宗旨,設計一些有意義的方面的一些組合:

  • Fixed_Sized
  • FIFO
  • 通知
  • 緩衝
  • 最近
  • Last_N
  • Time_Window

選擇一個或結合無論你喜歡多少,直到你滿意的結果。

0

您可以在這裏使用符合STL的boost::circular_buffer而不是滾動您自己的版本。

+0

感謝您指出了這一點!儘管如此,我將會使用一個底層的'vector',因爲這看起來不那麼複雜,我還需要封裝循環緩衝區來實現'get'函數。 (較簡單:認爲迭代器失效等) – 2010-11-10 06:53:31