C++ 圆形阵列的矢量实现

C++ 圆形阵列的矢量实现,c++,arrays,algorithm,C++,Arrays,Algorithm,我很困惑。我正在读关于使用数组实现向量的书。当我们使用简单的动态数组实现时,一切都很好。 有人提到,可以通过以循环方式使用数组来实现向量,这将使元素的添加和删除(第一次和最后一次)以恒定的时间运行。这不是链表应该做的吗 我想知道它是如何工作的,但我找不到真正的实现或正确的解释。欢迎提供关于总体思路和实施方法的任何信息 编辑:我的猜测是新数据应该写在“最旧”的数据上,数组具有固定的大小,并且必须有一个存储上次使用位置的变量。您正在谈论的 不幸的是,你不能使用它来实现向量,因为你不能插入中间或者从中

我很困惑。我正在读关于使用数组实现向量的书。当我们使用简单的动态数组实现时,一切都很好。

有人提到,可以通过以循环方式使用数组来实现向量,这将使元素的添加和删除(第一次和最后一次)以恒定的时间运行。这不是链表应该做的吗

我想知道它是如何工作的,但我找不到真正的实现或正确的解释。欢迎提供关于总体思路和实施方法的任何信息

编辑:我的猜测是新数据应该写在“最旧”的数据上,数组具有固定的大小,并且必须有一个存储上次使用位置的变量。

您正在谈论的


不幸的是,你不能使用它来实现向量,因为你不能插入中间或者从中间删除.< /p>

,因为C++ 03代码>矢量< /代码>保证了连续存储,也就是说,对于每个<代码> 0,如果用“队列”替换“vector”,那么你的问题将对我更有意义。你不是那个意思吗?在哪里提到的?我敢打赌这句话是关于两端(正面和背面)的添加和删除,而不是任意位置。@Dukeling不,我的意思是向量(很遗憾)。你能正确定义你的数据结构必须具有的操作类型吗?@Pierreemanuellallemant,但我们谈论的是“圆形数组”我想这意味着一个循环缓冲区,也就是环形缓冲区。看不到链接列表。不是我要找的100%,但它为研究提供了一个很好的开端!谢谢。什么能阻止你在循环缓冲区的中间插入或擦除?当然,你必须把所有的东西都拖进/拖出间隙,但这就是

vector
所做的。@Steve:事实上,没有什么能阻止我这么做,vector可以使用循环缓冲区来实现。在C/C++中,人们甚至可以在数组/表之外进行写操作——但这是为什么呢。
&vec[n] == &vec[0] + n