本文共 1460 字,大约阅读时间需要 4 分钟。
适配器作为STL的六大组件之一,实现代码的复用
为了运行效率,类模板是相互独立的,那就是独立设计,没有使用继承的思想。对类模板的扩展是采用适配器;来完成的,通用性是模板库设计的出发点之一,这是泛型算法与函数对象来达到的。
模板追求的是运行效率,而派生追求的是编程效率
使用类模板,把现有的类当做参数来传递就可以利用此类中现有的接口。例如用现有的容器(只有用的容器有相应的接口就行)来实现堆栈:
#ifndef _Stack_H_
#define _Stack_H_#include <deque>#include <exception>template<typename T,typename CONT=deque<T>>class Stack{ public: explicit Stack(); //防止隐式的转换构造 ~Stack(); void push(const T& elem); void pop(); T& top(); const T& top() const; bool empty() const;private: CONT element_;};template <typename T,typename CONT=delete<T>>Stack<T, CONT>::Stack() { }template <typename T, typename CONT = delete<T>>Stack<T, CONT>::~Stack(){ }template <typename T, typename CONT = delete<T>>void Stack<T, CONT>::push(const T& elem){ element_.push_back(elem);}template <typename T, typename CONT = delete<T>>void Stack<T, CONT>::pop(){ element_.pop_back();}template <typename T, typename CONT = delete<T>>T& Stack<T, CONT>::top(){ return element_.back();//取出里面的最后一个元素}template <typename T, typename CONT = delete<T>>const T& Stack<T, CONT>::top() const{ return element_.back();}template <typename T, typename CONT = delete<T>>bool Stack<T,CONT>::empty() const{ return element_.empty();}#endif //_Stack_H_
#include <iostream>
#include <vector>#include "Stack.h"using namespace std;int main(void){ Stack<int,vector<int>> s; s.push(1); s.push(2); s.push(3); s.push(5); while (!s.empty()) { cout << s.top() << endl; s.pop(); } return 0;}转载地址:http://ufdii.baihongyu.com/