STL stack
stack 和 queue 一样,并不属于STL中容器的一种,是一个适配器(adapter),或叫配接器。底层维护一个其他容器,并不自己实现,只提供有限的接口。
#include <vector>
#include <cassert>
//using namespace std;
namespace my
{
template<class T>
class stack
{
public:
stack() {}
stack(const stack<T>& st)
{
std::vector<T> tmp(st.v);
v.swap(tmp);
}
/* STL 中不支持迭代器构造
template<class InputIterator>
stack(InputIterator begin, InputIterator end)
{
while (begin != end)
{
v.push_back(*begin);
begin++;
}
}*/
void push(const T& x)
{
v.push_back(x);
}
void pop()
{
assert(!v.empty());
v.pop_back();
}
const T& top() const
{
assert(!v.empty());
return v.back();
}
T& top()
{
assert(!v.empty());
return v.back();
}
bool empty() const
{
return v.empty();
}
size_t size() const
{
return v.size();
}
void swap(stack<T>& st)
{
v.swap(st.v);
}
void clear()
{
v.clear();
}
private:
std::vector<T> v;
};
}