LeetCode225.队列实现栈
ques:
用两个队列模拟栈(我用的是一个)
ans:
用的C++标准库里面的Queue模板类创建实例,主要思路就是push函数里面做文章,其余函数pop/top/empty都正常实现。
根据栈和队列的特性,插入点不变,只能是队尾,但每次插入队尾总想把他放在栈顶,所以就让队列前面的元素依次出队并排在队尾,即可保持前面队列元素扔按序,而新插入的在栈顶(队首),从而完成模拟栈。
私有成员为模板类的实例对象,通过成员函数来操作该队列,在push函数中,最初尝试 q.push(q.pop());编译器报错,因为q.pop()是队列的pop API接口函数,只是弹出队首而并无返回值,而这里需要用栈Stack的实例对象来调用pop成员函数,也就是通过this指针来调用
#include <iostream> #include <queue> using namespace std; class MyStack { private: queue<int> q; public: MyStack() {} void push(int x) { q.push(x); if (q.size() > 1) { for (int i = 1; i <= q.size() - 1; i++) { q.push(this->pop()); } } } int pop() { int top = q.front(); q.pop(); return top; } int top() { return q.front(); } bool empty() { if (q.empty() == 1) return true; else return false; } }; /** * Your MyStack object will be instantiated and called as such: * MyStack* obj = new MyStack(); * obj->push(x); * int param_2 = obj->pop(); * int param_3 = obj->top(); * bool param_4 = obj->empty(); */
下面的代码确实比自己的优化许多
查看代码 class MyStack { public: MyStack() { } void push(int x) { int n = static_cast<int>(q.size()); q.push(x); while (n--) { q.push(q.front()); q.pop(); } } int pop() { int t = q.front(); q.pop(); return t; } int top() { return q.front(); } bool empty() { return q.empty(); } private: queue<int> q; };
summary:
初刷代码好多知识都忘了,也是在网上现学的思路,自己再用代码实现的,第一次通过了,不过时间和内存这些性能方面还是挺落后的,以后熟练了可以看看怎么改进。
这里构造函数为空,做题过程中稍微看了看拷贝构造函数,双端队列和优先队列,以及类成员函数之间是不能相互直接调用的,可以在一个成员函数中传参为类的实例化对象,通过该对象访问另一成员函数,解决方法:
本篇为博主在学习中遇到的问题,仅以此记录并供以后复习使用,同时希望能够帮助到有类似问题的同学。
一、同一个对象的类成员函数相互调用
如图所示,类成员函数fun2直接调用类成员函数fun,最终如果对象调用fun2则会输出fun1,证明能够如此调用。
二、参数是另一个对象的类成员函数,调用参数中对象的成员函数
1、首先第一种情况,如果是const 引用的情况
可以看到无法成功调用,报错信息指出将const 转化为&,权限扩大,因此无法调用,如果仍想这样调用,则需要对程序稍作修改。
具体修改方法有两种:
1、
class test { public: void fun() { cout << '1' << endl; } void fun2(test& ano) { ano.fun(); } };
将const删除,这样就不会有权限扩大的问题
2、
class test { public: void fun() const { cout << '1' << endl; } void fun2(const test& ano) { ano.fun(); } };
在被使用到的成员函数后面加const变为只读函数,而不改变类内成员的值,这样,也不会有权限扩大的问题,但是仅仅只有带const的只读函数能够被调用。
版权声明:后半部分为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_67828227/article/details/127262756
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步