栈的初始化应该怎么做

leetcode第155 最小栈问题

class MinStack {
public:
    MinStack() {
        

    }
    
    void push(int val) {
        if(s2.empty()||val<=s2.top())
        {
            s2.push(val);
        }
        s1.push(val);


    }
    
    void pop() {
        if(s1.top()==s2.top())
        {
            s2.pop();
        }
        s1.pop();

    }
    
    int top() {
        return s1.top();

    }
    
    int getMin() {

        if(s1.top()==s2.top())
        {
            return s2.top();
        }
        while(s1.top()!=s2.top())
        {
            s1.pop();
        }
        return s2.top();
    }
private:
    stack<int> s1;
    stack<int> s2;

};

为什么stack要写在private而不是构造函数里面

很简单啊,因为stack s1是类的成员变量啊。放构造函数里的话,只能是构造函数里的局部变量了啊

参考GPT和自己的思路:

stack被写在private中是为了保证数据的安全性和封装性。如果stack被放在构造函数中,那么这将意味着在类外可以通过实例直接访问stack,可能存在被误操作的风险。而将stack放在private中,可以让外部操作与类的内部实现相分离,实现了封装性和模块化的设计思想,并且通过提供公共的接口(方法)使得外部访问更加安全、可靠。

参考GPT和自己的思路:

将 stack 写在 private 成员中,是为了确保外部无法直接访问和更改栈,从而保证了程序的封装性和安全性。如果将 stack 写在构造函数里面,那么每次对象被创建都会产生一个新的栈,这显然不符合实际需要,同时也会增加内存开销。因此,将 stack 写在 private 成员中可以保证只有在类的成员函数内可以操作它,避免了多余的内存开销,并且确保了数据的封装性。