堆叠最大大小覆盖C++

Joh*_*0te 0 c++ stl data-structures

如果我正在制作类似撤销堆栈的东西,并且我只想支持30次撤消操作,那么拥有最大深度为30的堆栈会很不错.

你显然不希望堆栈在这一点上限制添加,你只是希望它在添加31st时丢弃最底层的元素.

我知道我可以通过列表模仿这种功能,但我想知道是否有办法让STL实现它,或者是否有其他预先实现的选项?

Set*_*gie 6

我会使用一个循环链接列表(或只是一个循环使用的缓冲区)与30个节点(或元素).您将在同一节点处开始顶部和底部指针,并在添加元素时前进顶部,并在删除元素时将其退回.如果你添加了很多元素,你到达了底部(你已经绕过循环)然后你推进顶部和底部指针,使它们不会相互交叉,并覆盖底部下面的那个指针(顶部指针现在指向的位置).

另一种方法是分配一个数组(或环绕a vector),而不是动态分配内存,并在你想要推进索引时将索引模型化30.

无论哪种方式,除了在开始之外你永远不必分配或释放内存,你可以很好地处理溢出.您可以在维基百科页面上阅读有关循环缓冲区的详细信息.

  • 我正要回答"你想要的是一个循环缓冲区",这可以通过围绕std :: vector/deque/array的简单包装来轻松实现.预先分配30个元素并围绕它们进行迭代比将新元素连续分配到列表头部同时删除尾部上的元素(这最终会导致大量碎片)要高效得多. (3认同)