类模版Stack的实现
//stack1.hpp
#include<vector>
#include<stdexcept>
using namespace std;
template <typename T>
class Stack
{
private:
vector<T> elems;
public:
void push(T const&);
void pop();
T top() const;
bool empty() const
{
return elems.empty();
}
};
template <typename T>
void Stack<T>::push(T const &elem)
{
elems.push_back(elem);//vector里面最后添加一个,即栈顶添加一个元素
}
template <typename T>
void Stack<T>::pop()
{
if(elems.empty())
{
throw out_of_range("Stack<>::pop():empty stack");
}
elems.pop_back();//vector里面移除最后一个元素,即移除栈顶元素
}
template <typename T>
T Stack<T>::top() const
{
if(elems.empty())
{
throw out_of_range("Stack<>::top():empty stack");
}
return elems.back();//vector里面返回最末一个元素,即stack里面的栈顶元素
}//main.cpp
//类模版Stack实现
#include<iostream>
#include<string>
#include<vector>
#include"stack1.hpp"
using namespace std;
int main()
{
Stack<int> intStack;
//使用int桟
cout<<"使用int桟"<<endl;
for(int i=1;i<6;i++)
intStack.push(i);
while(!intStack.empty())
{
cout<<intStack.top()<<" ";
intStack.pop();
}
cout<<endl;
Stack<string> stringStack;
cout<<"请输入string(#退出):";
string str;
while(cin>>str)
{
if(str=="#")
break;
stringStack.push(str);
}
while(!stringStack.empty())
{
cout<<stringStack.top()<<" ";
stringStack.pop();
}
cout<<endl;
system("pause");
return 0;
}
对于所有被调用的成员函数,都会实例化出基于int类型的函数代码。
注意:只有那些被调用的成员函数,才会产生这些函数的实例化代码。对于类模版,成员函数只有在被使用的时候才会被实例化。
原文地址:http://blog.csdn.net/lanzhihui_10086/article/details/38959863