【问题标题】:Circular buffer of an array?数组的循环缓冲区?
【发布时间】:2012-08-18 23:15:06
【问题描述】:

我有一个二维双精度需要保存在循环缓冲区中。我宁愿将它放在一个缓冲区中,而不必跟上两个一维缓冲区。是否可以轻松做到这一点,还是最好只使用两个缓冲区?

【问题讨论】:

  • 你能稍微澄清一下你的意思吗?你的意思是一个二维的双精度数组吗?当您说需要将其保存在循环缓冲区中时,您的意思是什么?
  • 很难准确地说出您要查找的内容,但通过简单的算术运算,可以将一维数组视为二维数组。只需执行arr[ y * width + x ] 即可获取xy 位置的元素。
  • @David - 是的,像 'double myDouble[1];' 这样的二维数组我需要存储在一个循环缓冲区中。
  • @Dave 我没有真正尝试过任何东西,我正在查看 boost::circular_buffer 的文档,想知道我是否可以这样做或必须使用两个缓冲区。
  • @Ylisar 这可能是我要研究的问题,但它确实使缓冲区访问复杂了一点。

标签: c++ boost circular-buffer


【解决方案1】:

如果每个元素的大小相同,即 D1 x D2,你可以分配一个数组

double data[D1*D2*numElem]

并使用行/列主要索引(i*D2 + j 或 i*D1 + j)来访问每个元素中的值。当然,每当您调整大小或插入/删除元素时,都必须分配新缓冲区并复制值。如果每个元素的大小是可变的,或者您认为插入/删除/调整大小将很常见,请使用两个缓冲区。如果容器是稳定的并且迭代通用元素,单个缓冲区可能会更好。

【讨论】:

  • 对此不太确定。每次添加或删除缓冲区时都必须重新创建缓冲区,这有点浪费资源,不是吗?我希望在一个缓冲区中使用单个二维数组而不是两个单独的缓冲区的主要原因是第二个缓冲区可能在读取之间更新并且数据“不同步”。
  • @Johnny 您的目标是拥有一个带有二维数组元素的循环缓冲区吗?如果是这样,使用 double[] 实例化 boost::circular_buffer 然后行/列主索引将是最直接的。还是您想要一个其行/列都具有循环缓冲区功能的二维对象?
  • 我的目标是(或者更确切地说,是)有一个二维数组元素的循环缓冲区(一个双[2]数组),保存在一个缓冲区中。我说“是”是因为进一步研究提升,我认为这对我目前的技能水平来说有点太复杂了,而且对我的目的来说可能有点矫枉过正。我现在正在编写适合我的目的的自己的线性缓冲区类。我想我剩下的就是调整大小的功能,我会完成的。希望今天或明天。当我开始工作时,我会在 Stack Overflow 上发布我的课程以获取 cmets/suggestions。这实际上很有趣。
猜你喜欢
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多