template学习之利用标准函数库写栈

来源:互联网 发布:武松的战斗力 知乎 编辑:程序博客网 时间:2024/06/08 07:00
#include <vector>#include <string>#include <stdexcept>#include <iostream>//using namespace std;/*利用已经完成的Vertor标准库生成自定义的栈结构而且还用到模版,笔试过程中绝对是一个亮点*/template <typename T>class Stack{private:std::vector<T> elem;public:Stack();Stack(Stack<T> const &);Stack<T>& operator= (Stack<T> const &) ;//更加完善void push(T const &);void pop();T top() const;bool empty() const{return elem.empty();}};template <typename T>Stack<T>::Stack(){}template <typename T>Stack<T>::Stack(Stack<T> const &s){this->elem = s.elem;}template <typename T>void Stack<T>::push(T const &e){elem.push_back(e);//追加}template <typename T>void Stack<T>::pop(){if(elem.empty()){throw std::out_of_range("Stack<>::pop empty stack");}elem.pop_back();//移除最后一个元素}template <typename T>T Stack<T>::top() const {if(elem.empty()){throw std::out_of_range("Stack<>::top empty stack");}return elem.back();//返回最后一个元素的拷贝}/*正确的复制构造函数的用法*/template <typename T>Stack<T> &  Stack<T>::operator = (Stack<T> const &s){//Stack<T> tempStack = new Stack<T>(s);//return//return tempStack;this->elem = s.elem;//成功return *this ;//tempStack.elem = s.elem;//return tempStack;}int main(){Stack<std::string> Q;std::string s1="test";std::string s2="user";std::string s3="root";Q.push(s1);Q.push(s2);std::cout << Q.top() << std::endl;Q.push(s3);std::cout << Q.top() << std::endl;Q.pop();std::cout << Q.top() << std::endl;//P = Q;//Stack<std::string> P = new Stack<std::string>();//P=Q;//这样用没有问题,好像不能直接赋值,我还要确定一下Stack<std::string> P(Q);//可以这样用//P = Q;//Stack<std::string> P;//可以这样用//P = Q;std::cout << P.top() <<std::endl;}

原创粉丝点击