什么是容器适配器?首先我们需要知道,容器适配器并不属于STL容器,因为它是在已有容器的基础上进行自主设计的。就像笔记本的电源适配器,把220V的电压转化为12-20V不等的电压供笔记本使用;就像读者出国旅游,如果外语不算很流利通过翻译软件跟外国人聊天一样,翻译软件就充当这个适配器的功能。适配器简单来说就是把已有的东西添加一些功能或限制一些接口一样,实现满足需求的目的。
在掌握STL容器的基础下,我们需要实现一个栈的容器,通过对list容器进行功能限制就可以实现!
#include<iostream> #include<list> /*通过list容器来实现一个栈*/ using namespace std; template<typename T> struct myStack { list<T> l; /*压栈*/ void push(const T&t) { l.push_front(t); } /*大小*/ size_t size() { return l.size(); } /*弹栈*/ void pop() { l.pop_front(); } T top() { return l.front(); } /*容器是否为空*/ bool empty() { return l.empty(); } }; void test() { myStack<int> s; for(int i=0;i<5;++i) s.push(i+1); cout << "弹栈遍历:"; while(!s.empty()) { cout << s.top() << " "; s.pop(); } } int main(){ test(); return 0; }
编译结果如下:
通过对list容器的“包装”,我们实现了一个带有约束的stack容器,实现”先入后出“的元素增删规则。
总结:容器适配器能够很好地满足个性化需求,前提要我们能很好地掌握STL容器,这样我们才能做到随机应变!
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程