У меня есть кольцевой буфер фиксированного размера (реализованный в виде массива): при инициализации буфер заполняется с указанным максимальным количеством элементов, который позволяет использовать единичный индекс позиции для отслеживания нашей текущей позиции в круге.
Каков эффективный способ доступа к элементу в кольцевом буфере? Вот мое текущее решение:
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
равно максимальный размер буфера.