【C++代码】之《最大栈》

#include <iostream>
#include <stack>
#include <vector>
#include <assert.h>
#include <time.h>

using namespace std;

template <class T>
class MaxStack
{
private:
    stack<T> mainStack;
    stack<T> maxStack;
    
public:
    MaxStack() : mainStack(), maxStack()
    {
        cout << "调用默认构造函数!" <<endl;
    };
    ~MaxStack() 
    {
        cout << "调用析构函数!" << endl;
    };
    MaxStack(const MaxStack & sta) : mainStack(sta.maxStack), maxStack(sta.maxStack) // 初始化列表执行于拷贝构造函数之前
    {
        cout << "调用拷贝构造函数!" << endl;
    }
    MaxStack & operator=(const MaxStack & sta)
    {
        cout << "调用拷贝赋值运算符!" << endl;
        this->mainStack = sta.mainStack;
        this->maxStack = sta.maxStack;
        return *this;
    }
    void push(const T & num)
    {
        mainStack.push(num);
        if (maxStack.empty() || num >= maxStack.top())
        {
            maxStack.push(num);
        }
    }
    T pop()
    {
        assert(!mainStack.empty());
        if (mainStack.top() == maxStack.top())
        {
            maxStack.pop();
        }
        T result = mainStack.top();
        mainStack.pop();
        return result;
    }

    T top() const
    {
        assert(!mainStack.empty());
        return maxStack.top();
    }
};

int main()
{
    MaxStack<int> st;
    st.push(4);
    st.push(9);
    st.push(7);
    st.push(3);
    st.push(6);
    st.push(1); 
    const clock_t & start = clock(); // 定义时即初始化
    for (int i = 0; i < 10; ++i)
    {
        cout << st.top() << '\t';
    } 
    cout << endl;
    const clock_t & end = clock(); // 定义时即初始化,并尽可能保证被使用,不浪费资源
    cout << "time  consumed : " << (end - start) / CLOCKS_PER_SEC << endl;
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值