比较叠加的双打导致总是相等

时间:2014-08-11 20:51:07

标签: c++ stack comparison overloading lifo

我正在尝试比较两个堆栈,看它们是否相等。不幸的是,这个代码使我所有的比较都说堆栈是相等的,即使堆栈不是。

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

任何人都知道什么是错的?

1 个答案:

答案 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;
}