现在的位置: 首页 > 综合 > 正文

C++Templates中的例子: 用vector实现一个栈Stack类模板

2012年08月20日 ⁄ 综合 ⁄ 共 2193字 ⁄ 字号 评论关闭

++++++++++++++++++++++++Stack1.h

 

#include <vector>  //standard vector class template: vector<>
#include <stdexcept>  //stadard exception class

//Declaration of Class Template
template<typename T>
class Stack
{
private:
 std::vector<T> elems; //elements
public:
 void push(T const&); //push element
 void pop();    //pop element
 T top() const;   //return top element
 bool empty() const
 {
  return elems.empty();
 }
};

//Implementation of Member Functions
template <typename T>
void Stack<T>::push(T const &elem)
{
 elems.push_back(elem); //append copy of passed elem
}

template <typename T>
void Stack<T>::pop()
{
 if(elems.empty()){
  throw std::out_of_range("Stack<>::pop():empty stack");
 }
 elems.pop_back();  //remove last element
}

template <typename T>
T Stack<T>::top() const
{
 if (elems.empty())
 {
  throw std::out_of_range("Stack<>::top() : empty stack");
 }
 return elems.back(); //return copy of last element
}

//SUMMARY
/*1. Vector<>对象常用的几种操作  //参见《STL Tutorial and Reference Guide》原书pp.131 Ch6.1

1.    v.push_back(x)             在数组的最后添加一个值为t的数据  (pp.135)
2.    v.pop_back()    删除最后一个元素 /!但当empty时unpredictable  (pp.141)
3.    v.back()     返回最后一个元素 /!但当empty时unpredictable  (pp.141)
3.    v.size()                         当前使用数据的大小
4.    v.empty()                      判断vector是否为空
5.    v[n]                               返回v中位置为n的元素
6.    v1=v2                           把v1的元素替换为v2元素的副本
7.    v1==v2                         判断v1与v2是否相等
8.    !=、<、<=、>、>=      保持这些操作符惯有含义
*/

 

++++++++++++++++++++++++Stack1.cpp

 

 

// stack.cpp : 定义控制台应用程序的入口点。
//Use of Class Template Stack<>

#include <time.h>
#include "stdafx.h"
#include <string>
#include <iostream>
#include <cstdlib>
#include "stack1.h"

int _tmain(int argc, _TCHAR* argv[])
{
 try{
  Stack<int> intStack; //stack of ints;  also can  do this:"typedef Stack<int> IntStack;"
  Stack<std::string> stringStack; //stack of strings
  
  //manipulate int stack
  intStack.push(7);
  std::cout<<"intStack.top() = "<<intStack.top()<<std::endl;

  //manipulate string stack
  stringStack.push("hello");
  std::cout<<"stringStack.top() = "<<stringStack.top()<<std::endl;
  stringStack.pop();
  stringStack.pop();
 }
 catch (std::exception const& ex){
  std::cout<<"Exception ex catched: ex.what()= "<<ex.what()<<std::endl;
 }
 ::system("pause");
 return EXIT_FAILURE;  //exit program with ERROR status(stdlib.h中定义了宏EXIT_FAILURE=1,EXIT_SUCCESS=0)
}

 

抱歉!评论已关闭.