我正在尝试比较两个堆栈,看它们是否相等。不幸的是,这个代码使我所有的比较都说堆栈是相等的,即使堆栈不是。
Stack_implementation.cpp
摘录:
int DoubleStack::operator==(DoubleStack& rhs)
{
int equal = 1;
for (int i = 0; i <= tos; i++) //tos is the top of the stack indicator
{ //it tells how big the stack is
if (data[i] != rhs.data[i])
{
equal = 0;
break;
}
}
return equal;
}
main.cpp
相关摘录:
{
cout << "Comparing stacks..." << endl;
if (stack1 == stack2)
cout << "stack1 = stack2." << endl;
else
cout << "stack1 != stack2." << endl;
}
输出始终是
stack1 = stack2
任何人都知道什么是错的?
答案 0 :(得分:1)
第一次检查应该是堆栈的大小;如果尺寸不相同,堆叠不能相等。编写的代码可以超出其中一个堆栈的结尾。
您也可以在找到一个不同的项目后立即返回。没有必要继续循环。
bool DoubleStack::operator==(DoubleStack& rhs)
{
if (tos != rhs.tos) {
return false;
}
for (int i = 0; i <= tos; i++) //tos is the top of the stack indicator
{ //it tells how big the stack is
if (data[i] != rhs.data[i])
{
return false;
}
}
return true;
}