C++ C++;堆栈实现-top方法的两个版本

C++ C++;堆栈实现-top方法的两个版本,c++,stack,C++,Stack,我必须在C中实现两种方法++ int& stack::top(); int stack::top() const; 据我所知,第一个允许我写这样的东西: myStack->top() = 500 // now the top element is 500 bool isTopMoreThan(const stack st, int val) { return st.top() > val; } 我不知道第二种方法的目的是什么。如果你这样做,第二种方法很有用: my

我必须在C中实现两种方法++

int& stack::top();
int stack::top() const;
据我所知,第一个允许我写这样的东西:

myStack->top() = 500 // now the top element is 500
bool isTopMoreThan(const stack st, int val)
{
   return st.top() > val;
}

我不知道第二种方法的目的是什么。

如果你这样做,第二种方法很有用:

myStack->top() = 500 // now the top element is 500
bool isTopMoreThan(const stack st, int val)
{
   return st.top() > val;
}

或者任何其他时间,您有一个
常量
堆栈对象。

堆栈末尾的
常量

int stack::top() const;
表示调用此函数的堆栈对象为const。当您有一个常量堆栈时,您不想调用第一个函数,因为它允许对堆栈顶部元素进行非常量访问。在第一个函数末尾缺少
const
,这确保了不能对const对象调用它

但您仍然希望至少能够检查堆栈顶部的值,即使它是const(或者更常见的是,通过const引用访问)。这就是第二个函数的作用。例如:

int getTop(const stack& st)
{
    return st.top();
}

如果没有第二个函数,这个(无可否认是无用的)函数将无法编译,因为第一个函数不能在常量堆栈上调用。

将第二个版本想象为
peek