设为首页 加入收藏

TOP

3.1 类模板Stack的实现
2013-10-07 00:06:07 来源: 作者: 【 】 浏览:61
Tags:3.1 模板 Stack 实现

第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++(www.cppentry.com)标准库的类模板vector< >来实现的;因此,我们不需要亲自实现内存管理、拷贝构造函数和赋值运算符;从而可以把精力放在该类模板的接口实现上。


回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++ Templates中文版 序 下一篇2.2 实参的演绎 (deduction)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: