您所在的位置: 首页 > 读书频道 > 设计开发 > C++ >

3.1 类模板Stack的实现

http://book.51cto.com  2008-03-28 22:01  陈伟柱  人民邮电出版社  我要评论(0)
  • 摘要:《C++ Templates》中文版是C++模板编程的完全指南,旨在通过基本概念、常用技巧和应用实例3方面的有用资料,为读者打下C++模板知识的坚实基础。本文介绍了类模板Stack的实现。
  • 标签:C++  Templates

第3章 类模板

与函数相似,类也可以被一种或多种类型参数化。容器类就是一个具有这种特性的典型例子,它通常被用于管理某种特定类型的元素。只要使用类模板,你就可以实现容器类,而不需要确定容器中元素的类型。在这一章中,我们使用Stack作为类模板的例子。

3.1  类模板Stack的实现

与函数模板的处理方式一样,我们在同一个头文件中声明和定义类Stack< >(我们将在6.3小节讨论如何把声明和定义放在不同的文件中),如下:

//basics/stack1.hpp
#include <vector>
#include <stdexcept>

template <typename T>
class Stack {
private:
std::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);    // 把elem的拷贝附加到末尾
}

template<typename T>
void Stack<T>::pop ()
{
if (elems.empty()) {
throw std::out_of_range("Stack<>::pop(): empty stack");
}
elems.pop_back();         //删除最后一个元素
}

template <typename T>
T Stack<T>::top () const
{
if (elems.empty()) {
throw std::out_of_range("Stack<>::top(): empty stack");
}
return elems.back();      // 返回最后一个元素的拷贝
}

可以看出,类模板Stack<>是通过C++标准库的类模板vector< >来实现的;因此,我们不需要亲自实现内存管理、拷贝构造函数和赋值运算符;从而可以把精力放在该类模板的接口实现上。


回书目   上一节   下一节
上一篇: 2.5 小结 下一篇: 3.1.1 类模板的声明
C++是垃圾语言?!
VC++基础开发专题
C++开发专栏
Perl实例精解(第4版)
SQL Server 2005 Integration Services专家教程
 
 验证码: (点击刷新验证码)   匿名发表
  • 网络工程师考试案例动手实验营

  • 作者:郭春柱
  • 本书依据2009年版《网络工程师考试大纲》的考核要求,深入研究了历年网络工程师考试试题的命题风格和试题结构,对考查的知识点..
Copyright©2005-2008 51CTO.COM 版权所有