陕西省建设厅网站ca验证失败,wordpress批量导入文章,网站开发从哪开始学,无锡seo网站排名优化文章目录空间适配器stackstack的定义方式stack的使用stack的模拟实现queuequeue的定义方式queue的使用queue的模拟实现空间适配器
适配器是一种设计模式#xff08;设计模式是一套被反复使用的#xff0c;多数人知晓的#xff0c;经过分类编目的#xff0c;代码设计经验的…
文章目录空间适配器stackstack的定义方式stack的使用stack的模拟实现queuequeue的定义方式queue的使用queue的模拟实现空间适配器
适配器是一种设计模式设计模式是一套被反复使用的多数人知晓的经过分类编目的代码设计经验的总结该种模式是将一个类的接口转换客户希望的另外一个接口。
虽然stack和queue中也可以存放元素但在STL中却并没有划分到容器的行列而是将其称为容器适配器这是因为stack和队列只是对其他容器的接口进行了包装当我们没有显示传时STL中stack和queue默认使用deque。 例如 如果我们定义一个stack并指定使用vector容器则定义出来的实际出来的stack就可以 复用vector的接口来实现栈的各个函数接口。
stack
stack是一种容器适配器专门用在具有后进先出操作的上下文环境中其只能从容器的一段继续元素的增删操作。
stack的定义方式
方式一使用STL中默认的适配器定义栈。(默认为deque stackint s1;方式二使用特定的适配器定义栈 stackint, vectorint st2;stackchar, vectorchar st3;stack的使用 int main()
{stackint, vectorint st1;st1.push(1);st1.push(2);st1.push(3);while (!st1.empty()){cout st1.top() endl;st1.pop();}//3 2 1cout st1.size() endl; //0return 0;
}stack的模拟实现
1为了体现vector适配器特性在初始栈的基础上增加一个模板参数Container并用deque默认容器作缺省值。 2: 根据我们所传的容器类型就变成指定容器类型的适配器进而复用指定容器的接口实现stack成员函数进而实现stack的各种功能。
namespace yzh
{template class T,class Container dequeTclass stack{public://构造拷贝构造赋值都不需要。//编译器会调用自定义类型参数。void push(const T x) //尾插{_con.push_back(x); //复用vector的push_back();}void pop() //尾删{_con.pop_back(); //复用vector的pop_back();}const T top() const //栈顶不可以被修改。return _con.back(); //复用vector的back();}size_t size() const {return _con.size(); //复用vector的size();}bool empty() const{ return _con.empty(); //复用vector的empty}private:Container _con;};
}queue
queque是一种容器适配器专门用具有先进先出的操作的上下文环境中其只能从容器的一端插入元素另一端提取元素。
queue的定义方式
定义方式一使用STL中默认的适配器定义队列。(默认为deque
queueint q1;定义方式二使用特定的适配器定义队列。 queueint, vectorint q2;queuechar, listchar q3;queue的使用 因为queue的接口存在头删和尾插如果使用vector封装效率太低所以一般借助lsit来封装。
int main()
{queueint, listint q1;q1.push(1);q1.push(2);q1.push(3);coutq1.back()endl;while (!q1.empty()){cout q1.front() endl;q1.pop();}//3 2 1cout q1.size() endl; //0return 0;
}queue的模拟实现
1: queue不能使用vector容器封装头插尾删效率太低。 2写两种front和back成员函数是为支持const队列调用const front和const back 它们的返回值是可读但不可以写的普通队列调用普通front和普通back返回值可读可写。
namespace yzh
{templateclass T, class Container dequeTclass queue{void push(const T x) //队尾入队列。{_con.push_back(x);}void pop() //对头出队列。{_con.pop_front();}T front(){return _con.front();}//返回值可以被修改T back(){return _con.back();}//返回值不可以被修改。T front(){return _con.top();}const T back()const{return _con.front();}//不可以被修改。const T front() const{return _con.front();}bool empty() const{return _con.empty();}size_t size() const{return _con.size();}
}