고정 크기 순환 버퍼 (배열로 구현 됨)가 있습니다. 초기화시 버퍼가 지정된 최대 수의 요소로 채워 지므로 서클의 현재 위치를 추적하기 위해 단일 위치 인덱스.고정 크기 순환 버퍼의 인덱스를 효율적으로 줄이는 방법
순환 버퍼의 요소에 액세스하는 효율적인 방법은 무엇입니까?
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
은 버퍼의 최대 크기입니다.
이 때 BUFFER_SIZE 같지 END_INDEX하지 않습니다 (당신이 음수 작업해야 가정)? –
@Fred, 순환 버퍼에 요소를 추가하면 ... buffer_size를 지나갈 때마다 색인이 래핑됩니다. – Kiril
@ 리릭 : 뭔가 빠뜨린 것 같습니다. –