回答
有一个数组,buffer
,有5个整数。有一个索引ind
到下一个元素。当您添加,做
buffer[ind] = value;
ind = (ind + 1) % 5;
从个人体验文件中,您需要注意ind不是负面的。如果将第二行更改为“ind =(max(0,ind)%1)+ 5;”,则不必担心ind的负值。 – 2010-09-02 02:40:01
你为什么不只是将ind设置为uint?如果仅涉及添加,这将更有效地解决您的问题 – Triskeldeian 2016-04-09 09:13:56
如果你的缓冲区的大小和数据类型是固定的,一个简单的数组是所有你需要:
int buffer[5];
再加上一对夫妇指针:
int* start = &buffer[0];
int* end = &buffer[4]+1;
int* input = start;
int* output = start;
取一个数组,arr
,索引idx
,以及一个计数器num
。
插入foo
,比如arr[idx++] = foo; idx %= buffer_len; num++;
。
读出一个项目到foo
,说foo = arr[(idx-num)%buffer_len]; num--;
。
添加边界检查。
您不需要num和idx。 – user3467349 2015-03-12 22:48:51
int rI =0;
int wI=0;
#define FIFO_SIZE 3
int checkAvail()
{
int avail=0;
if(wI<rI)
avail= (rI-wI);
else
avail = (FIFO_SIZE-wI+rI);
return avail;
}
int addFIFO(int *a, int val)
{
if(checkAvail()>0)
{
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<System::String ^> ^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);
}
- 1. C++简单循环缓冲区队列
- 2. Recv环形缓冲区vs简单缓冲区
- 3. 如何在环形缓冲区中编写字符串和整数?
- 4. 您如何编写Java或C#中的高效循环缓冲区?
- 5. 高效循环缓冲区?
- 6. 逆循环缓冲区
- 7. 如何在C中实现循环列表(环形缓冲区)?
- 8. O(1)haskell中的循环缓冲区?
- 9. Java中的循环缓冲区?
- 10. VB.NET中的循环缓冲区
- 11. 为什么我的环形缓冲区/循环缓冲区在java打破?
- 12. 如何在SelectListItems列表中实现循环缓冲区?
- 13. 循环缓冲区的线程安全
- 14. 复制整数缓冲区如果缓冲区在C
- 15. Android/Java简单的FiFO缓冲区
- 16. 循环字符数组缓冲区 - c
- 17. Qt是否有循环缓冲区?
- 18. Qt和Boost循环缓冲区
- 19. 发布WEB音频缓冲区循环
- 20. 斯卡拉集合循环缓冲区
- 21. fwrite不写整个缓冲区
- 22. 如何编写一个简单的jquery文本循环
- 23. 以循环缓冲区方式读取和写入文件
- 24. 简单的循环编程
- 25. 如何编译iphone的cpp协议缓冲区的简约库?
- 26. 在c#中的串行端口的循环缓冲区#
- 27. C简单缓冲区溢出
- 28. 用于计算循环缓冲区中剩余空间的简化算法?
- 29. 在fwrite调用中循环,直到写入缓冲区大小C/C++
- 30. 如何写入OpenGL深度缓冲区
代码的复杂性随着您希望它的安全性和可靠性而提高。例如,你想要防止下溢/溢出吗? – 2010-09-01 20:38:28
注意:圆形(环形)缓冲区不同于循环*队列*。 – 2010-09-01 20:42:32
我只需要存储一些数据的最后5个值,所以有更好的设计可以做到这一点。 – 2010-09-01 20:43:39