我有一个固定大小的循环缓冲区(作为数组实现):初始化时,缓冲区会填充指定的最大数量的元素,这允许使用单个位置索引来跟踪我们当前的位置圆圈。
访问循环缓冲区中元素的有效方法是什么?这是我目前的解决方案:
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
是缓冲区的最大大小。
最佳答案
我想到的最好的是:
public static int Wrap(int index, int n)
{
return ((index % n) + n) % n;
}
(假设您需要使用负数)
关于c# - 如何有效地包装固定大小的循环缓冲区的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4868049/