写在前头:今天是2022.11.7,好不容易抽出时间来刷题了,刷题真好。毕设和实验室两个项目压身确实很忙,我每天要分出三个头绪来处理。
1. 栈和队列基础
还真是学到了新东西。
三个最为普遍的STL版本:
- HP STL 其他版本的C++ STL,一般是以HP STL为蓝本实现出来的,HP STL是C++ STL的第一个实现版本,而且开放源代码。
- P.J.Plauger STL 由P.J.Plauger参照HP STL实现出来的,被**Visual C++**编译器所采用,不是开源的。
- SGI STL 由Silicon Graphics Computer Systems公司参照HP STL实现,被Linux的C++编译器GCC所采用,SGI STL是开源软件,源码可读性甚高。
栈和队列是SGI STL里面的数据结构。如果没有指定底层实现的话,默认是以deque为缺省情况下栈的底层结构。
我们也可以指定vector为栈的底层实现,初始化语句如下:
std::stack<int, std::vector<int> > third; // 使用vector为底层容器的栈
也可以指定list 为起底层实现,初始化queue的语句如下:
std::queue<int, std::list<int>> third; // 定义以list为底层容器的队列
所以STL 队列也不被归类为容器,而被归类为container adapter( 容器适配器)。
2. Leetcode 232. 用栈实现队列
本题很好理解,负负得正,但是下一题就没法正正得负了。
学习到了stack的用法:(但是他没有迭代器,就是不能像vector一样按index访问)
stack<int> stIn;
stIn.push();stIn.pop();stIn.size();stIn.top();stIn.empty();
另外卡哥题解中讲了这么一段,
“在工业级别代码开发中,最忌讳的就是 实现一个类似的函数,直接把代码粘过来改一改就完事了。这样的项目代码会越来越乱,一定要懂得复用,功能相近的函数要抽象出来,不要大量的复制粘贴,很容易出问题。”
希望后期找到一个抽象函数的例子。
3. Leetcode 225. 用队列实现栈
又学到了,STL的stack和queue的pop()都没有返回值。
queue:front()、back()、push_back()、pop_front()、empty() 和 size()
stack:push(x)、top()、pop()、size()、empty(),区别在于没有back