第一种是模板实现:
#pragma once
#include<iostream>
using namespace std;
#include"Vector.h"
template<class T, class Container = Vector<T>>
class Stack
{
public:
Stack()
{}
void Push(const T& data)
{
_con.PushBack(data);
}
void Pop()
{
_con.PopBack();
}
T& Top()
{
return _con.Back();
}
const T& Top()const
{
return _con.Back();
}
int Size()
{
return _con.Size();
}
bool Empty()
{
return _con.Empty();
}
private:
Container _con;
};
void TestStack()
{
Stack<int> s;
s.Push(1);
s.Push(2);
s.Push(3);
s.Push(4);
s.Push(5);
cout<<s.Size()<<endl;
cout<<s.Top()<<endl;
s.Pop();
s.Pop();
cout << s.Size() << endl;
cout << s.Top() << endl;
}
方法二:将第二个模板参数也给成一个模板类
#pragma once
#include<iostream>
using namespace std;
#include"Vector.h"
template<class T, template<class> class Container = Vector>//第二个模板参数也给成一个模板类
class Stack
{
public:
Stack()
{}
void Push(const T& data)
{
_con.PushBack(data);
}
void Pop()
{
_con.PopBack();
}
T& Top()
{
return _con.Back();
}
const T& Top()const
{
return _con.Back();
}
int Size()
{
return _con.Size();
}
bool Empty()
{
return _con.Empty();
}
private:
Container<T> _con;
};
void TestStack1()
{
Stack<int> s;
s.Push(1);
s.Push(2);
s.Push(3);
s.Push(4);
s.Push(5);
cout<<s.Size()<<endl;
cout<<s.Top()<<endl;
s.Pop();
s.Pop();
cout << s.Size() << endl;
cout << s.Top() << endl;
}
具体的Vector的操作请查看模板实现Vector