环形缓冲区wrap()函数

时间:2019-07-10 17:43:38

标签: stl buffer

我正在编写一个环形(圆形)缓冲区类,该类尽可能符合“ STL-做事的方式”。

我使用熟悉的函数名称(如pop()和front()),通过std :: allocator管理内存,并具有std :: iterator子类,以便可以使用诸如std :: sort()的算法。对于我当前的实现,缓冲区的头尾位置表示为与分配的内存的基地址的整数偏移量,即size_t值。目前暂无指针。

由于缓冲区的循环性质,如果索引/偏移量稍微超出缓冲区的容量,则必须对其进行包装。如果可以帮助,我不想使用余数运算符,因此提供-capacity <= index <capacity * 2,这是我可以编写的函数:

constexpr size_t capacity = 8;  // to show this is size_t

size_t wrap(T index) {
    if (index < 0)
        return capacity + index;
    else if (index >= capacity)
        return index - capacity;
    else
        return index;
}

我知道:

  • 返回值将始终为非负值,最好为size_t以使其对STL友好。
  • index当然可以为负。

什么是T的明智类型,同时将函数中的强制转换需求降至最低?我应该使用指针而不是整数类型的索引吗?

0 个答案:

没有答案