Я пытаюсь сравнить два стека, чтобы увидеть, равны ли они. К сожалению, этот код делает так, что все мои сравнения говорят, что стеки равны, даже если стеки не совпадают.
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
Кто-нибудь знает, что не так?
Первая проверка должна быть на размер стеков; если размеры не совпадают, стеки не могут быть равными. Написанный код может выходить за пределы одного из стеков.
Вы также можете вернуться, как только найдете другой предмет. Нет необходимости продолжать цикл.
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;
}