// stack 没有迭代器：不支持遍历
// 原因: 栈是一种特殊的容器，只能在栈顶进行插入和删除操作

// stack 常用接口
// 1. push(elem); // 入栈
// 2. pop(); // 出栈
// 3. top(); // 返回栈顶元素
// 4. empty(); // 判断栈是否为空
// 5. size(); // 返回栈中元素的个数
// 6. swap(stk1, stk2); // 交换两个栈

#include <iostream>
#include <stack>

using namespace std;

int main()
{
    stack<int> stk;

    for (int i = 0; i < 1000; i++)
    {
        stk.push(i);
    }

    cout << "当前栈中元素个数：" << stk.size() << endl;
    cout << "栈顶的元素: " << stk.top() << endl;

    // 只弹出 600 这个元素
    // 需要一个临时变量来保存弹出的元素
    stack<int> tmp_stk;
    while (stk.top() != 600)
    {
        tmp_stk.push(stk.top());
        stk.pop();
    }
    cout << "   ----------\n弹出 600 前的栈顶元素: "
         << stk.top() << endl;
    stk.pop();
    cout << "弹出 600 后的栈顶元素: "
         << stk.top()
         << endl
         << "   ----------\n";
    while (!tmp_stk.empty())
    {
        stk.push(tmp_stk.top());
        tmp_stk.pop();
    }
    cout << "当前栈中元素个数：" << stk.size() << endl;
    cout << "栈顶的元素: " << stk.top() << endl;

    return 0;
}