今天在做leetcode的一道题时,碰到了一个错误,涉及到::
作用域运算符的一个特殊用法。具体如下:
class MinStack {
public:
/** initialize your data structure here. */
stack<int> q;
stack<int> minq;
MinStack() {
}
void push(int x) {
q.push(x);
if(minq.size() == 0) minq.push(x);
else {
int tmp = ::min(x, minq.top()); //注意此处:: 的用法
minq.push(tmp);
}
}
void pop() {
q.pop();
minq.pop();
}
int top() {
return q.top();
}
int min() {
return minq.top();
}
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->min();
*/
本身是想调用c++内部的min函数来求两个数中的最小值,但由于该题中,类中定义好的成员函数中已经存在min
函数了。因此,此时若直接写min
函数,默认是调用的是类成员函数min
。所以只好写成::min
这种形式,表示我们调用的是全局的成员函数min
(即c++内部的min
函数)。