gpt4 book ai didi

c++ - 获取 std::stack 后面的容器

转载 作者:太空狗 更新时间:2023-10-29 23:49:48 24 4
gpt4 key购买 nike

我正在使用 std::stack 在我的程序中保存一个可能性列表。

std::stack<int, std::deque<int> > myStack;

现在,仅出于调试目的,我想访问我的std::stack 的所有元素(例如作为std::双端队列)。但是下面的语法是非法的:

std::deque<int> myDeque = myStack; // Does not compile

最简单的方法是什么?


我的做法是:

std::stack<int, std::deque<int> > newStack = myStack;
std::deque<int> myDeque;
while(!newStack.empty()){
myDeque.push_back(newStack.top());
newStack.pop();
}

但是看起来有点丑。

最佳答案

std::stack 的底层容器可作为 protected 成员访问 c .因此:

template<class T, class C>
struct MyStack : std::stack<T, C>
{
typedef std::stack<T, C> Stack;
using Stack::Stack;
using Stack::operator=;
using Stack::c; // expose as public
};

如果您不能更改定义并重新编译,那么:

template<class T, class C>
C& get_underlying_container(std::stack<T, C>& s) {
static_assert(sizeof s == sizeof(MyStack<T, C>), "Size mismatch.");
static_assert(alignof s == alignof(MyStack<T, C>), "Alignment mismatch.");
return static_cast<MyStack<T, C>&>(s).c;
}

关于c++ - 获取 std::stack 后面的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36621225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com