Mik*_*our 17
可以在不复制数据的情况下访问底层容器,但它需要一定数量的恶意.容器被暴露为受保护的成员,称为c,允许这样的恶作剧:
template <typename T>
class Shenanigans : private stack<T>
{
public:
explicit Shenanigans(stack<T>& victim) : victim(victim)
{
swap(victim);
}
~Shenanigans()
{
swap(victim);
}
using stack<T>::c;
private:
stack<T>& victim;
};
int main()
{
stack<int> s;
s.push(42);
{
Shenanigans<int> sh(s);
// The deque is accessible as sh.c, but the stack is temporarily empty.
cout << "Size: " << s.size() << " Data: " << sh.c.front() << "\n";
}
// The stack is restored.
cout << "Size: " << s.size() << " Data: " << s.top() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
当然,更好的解决方案是选择满足您需求的容器.
你需要手动完成:
while (!stk.empty())
{
deq.push_back(stk.top());
stk.pop();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1606 次 |
| 最近记录: |