正如标题所说,使用std::stack是否有一种方法可以通过引用/索引/指针来引用任何项而不弹出?如果没有,我如何实现这一点?
我的用例是,我正在做一个用于学习的虚拟机,我想引用std::stack中的堆栈项,这样我就可以推送和访问我的本地堆栈变量。我原本只打算做一个堆栈实现--但是我有stl!我猜我可能不得不自己滚动,因为这些项是不可变的,而且我还没有看到任何说明它的文档:(
我的用例(asm ; C++语言)
mov DWORD PTR [rbp-4], 123 ; stack.push(123);
mov DWORD PTR [rbp-8], 321 ; stack.push(321);
add DWORD PTR [rbp-4], 1 ; stack[?] = stack[?] + 1;
1条答案
按热度按时间kkbh8khc1#
是的,有一种简单的方法可以通过底层容器访问数据。
通常,所有这些都是不必要的,因为您始终可以首先使用基础容器。
但是如果你想在特殊情况下这样做,那么只需要取
top()
的地址,这将是底层容器中的最后一个元素,如果你减去堆栈的size()
(修正为1),那么你就有了一个指向底层容器开头的指针。然后,您可以按预期使用下标运算符
[]
。请参见以下示例:
因此,看起来我们找到了您想要的内容,但实际上,我们只是在底层容器上工作。
但正如前面所说,有时候这样做是有原因的......