智慧的老鸟

一个程序员需要有一棵Gank的心,Dota能培养我。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

STL用法很通俗易懂,但是,想深入了解STL源码的实现,以为以后设计自己的模板类。
首先应了解和掌握模板类的设计方法,然后推荐《C++模板元编程》、《STL源码剖析》两本书,博大精深的STL!这些书电子版在jask中都能下到。

1. 类模板和STL
STL是C++的标准模板库,其源码编程完全依赖模板实现。
类模板是能根据不同参数建立不同类型成员的类。

2. 类模板的定义
template<模板类参数>
class 类名
{
 成员名;
};
根据需要参数可以多个。

3. STL是模板类应用的一个最好的开源实例
在掌握STL的基本用法的基础上去理解模板类的设计会更加深刻,在掌握模板类设计的基础上,可以设计出自己需要的类似STL的容器。
比如给出的栈模板例子。

4. 一个简单的栈模板实例
// template of stack
template
class Stack
{
 public:
  Stack(int size=10);
  ~Stack();
  bool IsFull();
  bool IsEmpty();
  bool Push(const T&);
  T Pop();
 private:
  int m_size;
  int m_top;
  T *m_space;
};

template
Stack::Stack(int size)
{
 this->m_size = size;
 m_space = new T(size);
 m_top = size;
}

template
Stack::~Stack()
{
 delete []m_space;
}

template
bool Stack::IsFull()
{
 return m_top == 0;
}

template
bool Stack::IsEmpty()
{
 return m_top == m_size;
}

template
bool Stack::Push(const T&element)
{
 if(!IsFull())
 {
  m_space[--m_top] = element;
  return true;
 }
 return false;
}

template
T Stack::Pop()
{
 return m_space[m_top++];
}

5. 总结
模板和stl相辅相成,学习的时候,注意实例开发和模板类构件的积累。
模板类开发是C++构件开发的重要技术手段。

posted on 2012-10-23 13:38  智慧的老鸟  阅读(426)  评论(0编辑  收藏  举报