问题标签 [circular-buffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
12652 浏览

c# - 如何有效地包装固定大小的循环缓冲区的索引

我有一个固定大小的循环缓冲区(作为数组实现):在初始化时,缓冲区被指定的最大元素数填充,这允许使用单个位置索引来跟踪我们在圆中的当前位置。

访问循环缓冲区中元素的有效方法是什么?这是我目前的解决方案:

一些定义:
end_index是紧跟在圆中最后一个元素之后的元素的索引(它也被认为与 start_index 或圆的第一个元素相同)。
buffer_size是缓冲区的最大大小。

0 投票
5 回答
1299 浏览

c# - 堆栈的替代方案

我正在使用 C# 在 .Net 环境中工作。我需要一些 Stack 数据结构的替代方案。某种绑定堆栈。集合中元素的数量不应超过某个固定的指定数量。并且,如果达到该数量并推送新元素,则必须删除大多数旧元素。我需要这个来存储撤消/重做策略的命令。

0 投票
4 回答
2731 浏览

c - 循环缓冲区的结束指针问题

我正在使用 Visual c++。

我正在尝试实现一个循环缓冲区,这个 CB 必须处理特定类型的数据......事实上,它是一个结构数据,其中我们有某种原始数据要存储在 char 类型和与之关联的日期数据...这已使用结构实现。

这是更多详细信息的代码:

当我编译代码时,一切都很好,但是当我调试时,我注意到 buffer_end 指针有问题,它说 bad_pointer ......如果容量大于 56 就会发生这种情况......我不知道为什么指针不能指向缓冲区的末尾。但是如果容量小于 56,则指针正好指向缓冲区的末尾

如果有人知道为什么会这样,以及如何解决它,请帮助我..

提前致谢

0 投票
4 回答
16452 浏览

java - 使用循环数组实现双端队列?

我在使用循环数组实现这个双端队列时遇到了很多麻烦;特别是,无论我尝试什么,删除方法似乎都在删除错误的元素。任何人都可以帮忙吗?

0 投票
0 回答
317 浏览

c++ - 使用 boost::circular_buffer 初始化 boost::multi_array

我想创建一个boost::multi_arrayof boost::circular_buffer<double>,但我不知道如何启动它。它应该是 12boost::circular_buffer<double>个大小为 的数组50

我试过了:

我得到一个编译错误。

有人可以给我一个提示如何b正确启动吗?

0 投票
4 回答
8067 浏览

java - 使用循环数组实现队列:调整循环数组大小的最佳方法是什么?

我正在使用循环数组实现一个队列,并且我有点卡在resize()方法实现中(当数组已满时)。

在该enqueue()方法中,我检查数组的大小是否等于它的长度,并获取它是否已满。现在,我没有抛出异常,而是尝试调整数组的大小。

问题是,我有两种情况要考虑

  1. 前 <= 后
  2. 后<前

将旧数组的元素复制到更大的新数组中的最佳方法是什么?

我认为它使用for循环,例如:

然后oldArray= newArray,返回newArray并调整它的大小

我不确定用于执行此操作的 for 数量,我担心我会失去价值。

有人可以告诉我是否有更好的方法来做到这一点?

0 投票
2 回答
4028 浏览

c# - 如何移动一个数组元素环绕?

我正在尝试编写一个遍历数组的函数,当它找到某种类型的值时,它将向右移动定义数量的位置。

我知道如何通过临时存储一个值来移动元素,将右侧元素向左移动,然后将临时值写入正确的位置。

我正在苦苦挣扎的一点是,如果某个字符出现在数组的末尾附近,我需要它环绕并从数组的开头继续,所以是循环的。

例如,一个数组将大写字母向右移动 3 位,特殊字符向左移动 1 位:

要将 8 的元素移动到下面的 3 个位置,但这仅适用于 8 出现在数组末尾的 3 个元素之前并且不会环绕的情况。

输入数组:

所需的输出:

0 投票
3 回答
1256 浏览

c++ - 没有优先级反转的环形缓冲区

我有一个需要将数据传递给低优先级进程的高优先级进程。我编写了一个基本的环形缓冲区来处理数据的传递:

这就是问题所在。假设低优先级进程有一个预言机,它准确地告诉它需要读取多少数据,因此count()永远不需要调用。然后(除非我遗漏了什么)没有并发问题。但是,只要低优先级线程需要调用count()(高优先级线程可能也想调用它以检查缓冲区是否太满),count() 中的数学运算或更新可能会结束不是原子的,引入了一个错误。

我可以在开始和结束的访问周围放置一个互斥锁,但是如果高优先级线程必须等待低优先级线程获取的锁,这将导致优先级反转。

我也许可以使用原子操作解决一些问题,但我不知道有一个很好的跨平台库提供这些。

是否有避免这些问题的标准环形缓冲区设计?

0 投票
1 回答
1372 浏览

c++ - c++:访问字符串映射的元素并提升循环缓冲区

我正在编写一个程序,它将城市名称的文本文件读入向量,然后使用 stl::map 将每个城市与提升循环缓冲区相关联。我还有一个温度数据向量,在将其作为字符串从另一个文本文件中读取后,我将其转换为双精度类型。我想知道如何将这些数据输入我选择的循环缓冲区。例如,温度数据来自波士顿,所以我想将其放入与波士顿相关的循环缓冲区中。如果有人能告诉我如何做到这一点,我将不胜感激!这是我的代码。与地图有关的代码在底部附近。

0 投票
1 回答
355 浏览

c++ - 模板类类型大小

我为循环缓冲区编写了一个模板类:

这个类执行的一些操作依赖于对T. 这似乎可以正常工作(即T检查)。但是,当我尝试使用相同的类 where is时,由于某种原因计算为 16。我上次检查时,双字是 4 个字节,而不是 16。有谁知道为什么会这样?谢谢。BYTEsizeof(T) == 1TDWORDsizeof(T)

附加信息

由于其专有性质,我无法发布所有代码,但这是有问题的类声明和函数定义:

pFlags->pHead += sizeof(T);执行of时会出现上述问题IncrementHead