看到上一篇博客是2012.12月份的,真是岁月如梭,这也说明自己这一段时间也真是懒惰了,唉,微博玩多了,废话不多说,上菜。
c++ 顺序存储结构 有三种:vector(数组),list(链表),deque(数组和链表一种结合,暂不清楚怎么实现的,应该是数组的变种),说说适配器的情况,适配器是在存储结构上实现的一种既定范围的操作,如队列,栈等(一般和既定的业务,目的相关)。下面就来实现一下栈的操作,上代码:
栈的接口头文件:stack.h
#ifndef stack_h #define stack_h #include <deque> namespace huals{ template<typename element_type,typename container_type=std::deque<element_type> > class stack{ public: stack(){} template<typename CT> stack(CT temp):container(temp.begin(),temp.end()){} bool empty(); std::size_t size(); void pop(); element_type top(); void push(element_type temp); private: container_type container; }; } #include "stack.cpp" #endif
栈的具体实现:stack.cpp
#include <deque> namespace huals{ template<typename element_type,typename container_type> bool stack<element_type,container_type>::empty(){ return container.empty(); } template<typename element_type,typename container_type> std::size_t stack<element_type,container_type>::size(){ return container.size(); } template<typename element_type,typename container_type> void stack<element_type,container_type>::pop(){ if(!container.empty()) container.pop_back(); } template<typename element_type,typename container_type> element_type stack<element_type,container_type>::top(){ element_type temp=container.back(); return temp; } template<typename element_type,typename container_type> void stack<element_type,container_type>::push(element_type temp){ container.push_back(temp); } }
测试一下,可以通过,c++还是很强大,写这个东西的时候出了个小插曲,就是函数定义和声明,当函数有默认形参时候,默认形参只能在声明中写,定义的时候不要写,防止重复不一致。