如何在C / C ++中编写简单的整数循环缓冲区?
我看到很多模板和复杂的数据结构用于实现循环缓冲区。
如何为5个数字编码一个简单的整数循环缓冲区?
我在想C是最直截了当的吗?
谢谢。
有一个5个整数的数组, buffer
。 对下一个元素有一个索引。 当你添加,做
buffer[ind] = value; ind = (ind + 1) % 5;
取一个数组, arr
,一个索引idx
和一个计数器, num
。
要插入foo
,请说arr[idx++] = foo; idx %= buffer_len; num++;
arr[idx++] = foo; idx %= buffer_len; num++;
。
要将项读出到foo
,请说foo = arr[(idx-num)%buffer_len]; num--;
foo = arr[(idx-num)%buffer_len]; num--;
。
添加边界检查。
如果缓冲区的大小和数据类型是固定的,那么您只需要一个简单的数组:
int buffer[5];
添加几个指针:
int* start = &buffer[0]; int* end = &buffer[4]+1; int* input = start; int* output = start;
int rI =0; int wI=0; #define FIFO_SIZE 3 int checkAvail() { int avail=0; if(wI0) { a[wI]=val; wI++; if(wI>FIFO_SIZE) wI=0; } else { printf("FIFO full"); } return 0; } int remFIFO(int *a) { int val; if((FIFO_SIZE-checkAvail()>0)) { val =a[rI]; rI++; if(rI>FIFO_SIZE) rI=0; } else { printf("FIFO empty"); } return 0; } int main(array ^args) { int FIFO_ARRAY[FIFO_SIZE]={}; addFIFO(FIFO_ARRAY,1); addFIFO(FIFO_ARRAY,2); addFIFO(FIFO_ARRAY,3); addFIFO(FIFO_ARRAY,4); remFIFO(FIFO_ARRAY); remFIFO(FIFO_ARRAY); remFIFO(FIFO_ARRAY); remFIFO(FIFO_ARRAY); remFIFO(FIFO_ARRAY); }