我有一个固定大小的循环缓冲区(实现为数组):初始化时,缓冲区被填充到指定的最大元素数,这允许使用单个位置索引来跟踪我们在圆圈中的当前位置。
在循环缓冲区中访问元素的高效方法是什么?以下是我的当前解决方案:
int GetElement(int index)
{
if (index >= buffer_size || index < 0)
{
// some code to handle the case
}
else
{
// wrap the index
index = end_index + index >= buffer_size ? (index + end_index) - buffer_size : end_index + index;
}
return buffer[index];
}
一些定义:
end_index
是环形缓冲区中最后一个元素之后的索引(也可以被视为与 start_index
相同,即环形缓冲区的第一个元素)。
buffer_size
是缓冲区的最大大小。