我正在编写一个环形(圆形)缓冲区类,该类尽可能符合“ 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;
}
我知道:
index
当然可以为负。什么是T的明智类型,同时将函数中的强制转换需求降至最低?我应该使用指针而不是整数类型的索引吗?