#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;
}
【C++代码】之《最大栈》
最新推荐文章于 2023-08-06 10:29:45 发布