【问题标题】:How to overload == operator to see if two objects with a string vector are equal?如何重载 == 运算符以查看具有字符串向量的两个对象是否相等?
【发布时间】:2020-03-08 22:39:09
【问题描述】:

我正在编写一个名为 StringSet 的类,它的私有成员为 vector<string> dataint length

bool StringSet::operator == (StringSet d)
{
    for (int i = 0; i < length; i++)
    {
        if (data[i] == d.data[i])
        {
            return true;
        }
    }
    return false;
}

当我尝试像这样调用这个函数时,

StringSet doc1, doc2;
if (doc1 == doc2)
    {
        cout << "Both sentences are identical!\n";
    }

我得到一个断言失败,说向量下标超出范围,我知道这意味着什么,但我不知道它在这里意味着什么。如果有人能指出我犯的一个明显错误,那就太好了,因为我是 C++ 的新手。

【问题讨论】:

  • 如果一个StringSet 对象的长度更短怎么办?
  • 正如@GBlodgett 所说,您首先需要检查两个“长度”值是否相同。另外,我认为你需要调整你的逻辑:事实上,如果向量元素“对”中的任何一个相等,你将得到“真”。
  • length 是多余的。 vector.size() 方法。要比较两个向量,只需使用data == d.data
  • 由于vector&lt;string&gt; 保持自己的大小,您的班级可能无法确保data.size() == length。如果length &gt; data.size()length &gt; d.data.size(),由于访问向量的不存在元素,您的循环将给出未定义的行为。如果没有看到 minimal reproducible example,我们无法假设您的代码已正确设置 lengthd.length 以确保您的循环不会从向量之一的末端脱落。

标签: c++ vector operator-overloading


【解决方案1】:

很简单

bool StringSet::operator == (const StringSet& d) const
{
  return data == d.data;
}

std::vectorstd::string 已经有比较运算符,因此您不必实现一些特殊的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-30
    • 2011-04-25
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多