Rawu G's thinking

此刻 只有点燃

博客园 首页 新随笔 联系 订阅 管理
//basic/stack3.hpp

#include 
<vector>
#include 
<stdexcept>

template
<typename T ,typename CONT = std::vector<T> > // type a space between twp '>'

class Stack 
{
    
private:
        CONT elems;            
//contain the elems ,default is vector
        static int static_ver; // this static variable will instantiation in each different types of template is called 
    
    
public:
        
void push(T const&) ;
        
void pop(void);
        T top(
voidconst ;         //why not return T &
        bool empty(voidconst
        
{
            
return elems.empty();
        }

        Stack (Stack
<T,CONT> const&);  //use Stack<> when you need to specify the class type
                                       
//use only Stack when you only want to specify the class name                            
        Stack<T,CONT>& operator= (Stack<T,CONT> const&) ;
        
}
;

template
<typename T ,typename CONT>
void Stack<T,CONT>::push ( T const& elem ) //use Stack<>::
{
    elems.push_back(elem);
}


template
<typename T ,typename CONT>
void Stack<T,CONT>::pop(void)            //why not specify throw 
{
    
if(elems.empty())
    
{
        
throw std::out_of_range("Stack<>::pop(): empty stack");
    }

    elems.pop_back();
}


template
<typename T ,typename CONT>
T Stack
<T,CONT>::top(voidconst
{
    
if (elems.empty())
    
{
        
throw std::out_of_range("Stack<>::top(): empty stack");
    }

    
return elems.back();
}

//basics/stack3test.cpp


#include 
<iostream>
#include 
<deque>
#include 
<cstdlib>
#include 
"stack3.hpp"

int main(void)
{
    
try
    
{
      Stack
<int> intStack;
      intStack.push(
7)  ;  // only instantiation the function when it's called 
                           
// so you can use the 'type' that cannot perform all method in this template ,but only can perform the method you will use in your application.
      std::cout<< intStack.top() <<std::endl;
      intStack.pop();
      intStack.pop();
      std::cin.
get();
      
    }

    
catch (std::exception const& ex)
    
{
          std::cerr
<<"Exception: "<<ex.what()<<std::endl;
          std::cin.
get();
          
return EXIT_FAILURE;
    }

}

posted on 2006-06-08 20:15  Rawu  阅读(495)  评论(0编辑  收藏  举报