刷题的时候碰见,用一个数组模拟三个栈。
中间有段data[top[stackNum]]嫌弃写起来麻烦,便想使用top代替top[stackNum],便想使用using top=top[stackNum]后来发现这也不是数据类型,不能这么写,便是用#define top top[stackNum]。
#define 是按照字符串修改的,的确可以这么写,但是只想用在这一个类中。于是查了查#define typedef作用域的问题。
#define: 编译器遇见它开始,往下所有匹配的全部换掉(一个文件里)。可以使用undef XX结束。
typedef:一个代码体内{}.
代码展示:
class TripleInOne {
public:
int *data;
int _stackSize;
int bottom[3];
int top[3];
TripleInOne(int stackSize) {
data = new int[stackSize * 3];
_stackSize = stackSize;
bottom[0] =0;
bottom[1] =stackSize;
bottom[2] =2 * stackSize;
top[0] = -1;
top[1] = bottom[1] - 1;
top[2] = bottom[2] - 1;
}
#define top top[stackNum]
#define bottom bottom[stackNum]
void push(int stackNum, int value) {
if (top-bottom+1< _stackSize)
{
++top;
data[top] = value;
}
}
int pop(int stackNum) {
int result=0;
if (top>=bottom)
{
result = data[top];
--top;
return result;
}
return NULL;
}
int peek(int stackNum) {
if (top >= bottom)
{
return data[top];
}
return 0;
}
bool isEmpty(int stackNum) {
return !(top>=bottom);
}
#undef top
#undef bottom
};