您的位置:首页 > 编程语言 > C语言/C++

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

2009-04-06 18:36 169 查看
++++++++++++++++++++++++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
返回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)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: