【问题标题】:Naming a cyclic buffer class for timed samples?为定时样本命名​​循环缓冲区类?
【发布时间】:2010-11-09 07:59:17
【问题描述】:

给定:

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,因为该类将(最近的)时间戳映射到与这些时间戳对应的值。我对“最近”有点不确定,因为这似乎意味着较短的时间范围/样本数量。

【问题讨论】:

    标签: c++ language-agnostic naming


    【解决方案1】:

    您应该问自己,该类的用户是否需要知道或关心内部实现是一个循环缓冲区。如果不是,请将其命名为明确该类的目的是什么:可能类似于TimeMap,因为它似乎将值映射到离散的时间点。然后,您可以随时将内部实现更改为其他内容(例如 Hashtable),而无需更改类的名称。

    如果它始终是一个循环缓冲区对语义很重要,则考虑将其设为通用容器CircularBuffer 或类似容器,并使用模板来定义键和值的类型。

    【讨论】:

      【解决方案2】:

      它的目的和设计的一些有意义的方面的一些组合:

      • Fixed_Sized
      • 先进先出
      • 圆形
      • 缓冲区
      • 最近
      • Last_N
      • 时间窗口

      选择一个或组合任意多个,直到您对结果满意为止。

      【讨论】:

        【解决方案3】:

        CircularBuffer or RingBuffer

        我最近写了一个用于保持运行平均值(称为 RunningAverage),并将其称为我的 cmets 为“环形缓冲区”,所以我显然这是我的偏好。 :) 可能是因为它更短。

        【讨论】:

          【解决方案4】:

          您可以在此处使用符合 STL 的 boost::circular_buffer,而不是使用您自己的该结构版本。

          【讨论】:

          • 感谢您指出这一点!不过,我将使用底层的vector,因为这看起来不那么复杂,无论如何我都需要包装循环缓冲区来实现get 函数。 (不太复杂:想想迭代器失效等)
          猜你喜欢
          • 2021-09-01
          • 1970-01-01
          • 2022-08-13
          • 1970-01-01
          • 2018-06-29
          • 2019-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多