假设:
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
,因为类将(最近的)时间戳映射到与这些时间戳对应的值。我对“最近”有点不确定,因为这似乎意味着短时间范围/样本数量。
答案 0 :(得分:3)
您应该问自己,类的用户是否需要知道或关心内部实现是循环缓冲区。如果没有,请将其命名为明确该类的目的是什么:可能类似于TimeMap
,因为它似乎是将值映射到离散时间点。然后,您可以随时将内部实现更改为其他内容(例如,Hashtable),而无需更改类的名称。
如果语义对它始终是循环缓冲区很重要,那么考虑将其作为通用容器CircularBuffer
等,并使用模板来定义键和值的类型。
答案 1 :(得分:1)
其目的和设计的一些有意义的方面的某种组合:
选择一个或组合你喜欢的多个,直到你对结果感到满意为止。
答案 2 :(得分:0)
我最近写了一个保持运行平均值(称为RunningAverage),并将其作为“环形缓冲区”引用它,所以我显然这是我的偏好。 :)可能是因为它更短。
答案 3 :(得分:0)
您可以在此处使用符合STL的boost::circular_buffer,而不是滚动您自己的该结构版本。