3.1 类模板Stack的实现

2013-10-07 00:06:07 · 作者: · 浏览: 67

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


回书目   上一节   下一节