如何使用==运算符来比较数组的元素

时间:2016-04-21 16:31:01

标签: c++ arrays operator-overloading

编写一个包含整数数组的数组作为数据成员。该类包含以下成员函数:

  1. 将数组元素初始化为-1的构造函数。
  2. 用于输入数组中值的输入函数。
  3. 显示显示数组值的函数。
  4. 重载==运算符以比较两个对象的值。如果两个对象的所有值都相同,则重载函数返回1,否则返回0。
  5. 问题:我无法弄清楚如何使用==运算符进行比较。

    我的代码:

    #include<iostream>
    using namespace std;
    #define SIZE 10
    class array{
    public:
        int arr[SIZE];
    public: 
        array(){
            for (int i = 0; i < SIZE; i++){
    
                a[i] = -1;
            }
        }
    
        void input(){
    -       cout << "Enter values";
            for (int i = 0; i < SIZE; i++){
                cout << "Enter value number" << i + 1;
                cin >> arr[i];
            }
        }
    
        void show(){
            for (int i = 0; i < SIZE; i++){
                cout << arr[i];
            }
    
        }
    
        bool operator==(array& p) const
        {
            bool result = true;
            if (p.a != arr)
                result = false;
    
            return result;
        }
    };
    
    
    
    int main(){
    
        array arr, b, c;
        a.input();
        b.input();
        a.show(); b.show();
    
            return 0;
    }
    

4 个答案:

答案 0 :(得分:1)

你真正想要的可能是:

bool operator==(const array& p) const
             // ^^^^^
{
    if(this == &p)
        return true;
    for(size_t i = 0; i < SIZE; ++i) {
        if(arr[i] != p.arr[i])
        // ^^^         ^^^
            return false;
    }

    return true;
}

请注意,您的代码中还有其他一些错误:

array(){
    for (size_t i = 0; i < SIZE; i++){
      // ^^^^^^

        arr[i] = -1;
     // ^^^
    }
}

答案 1 :(得分:1)

你对平等的定义是什么?我假设你的意思是大小相同,所有元素是相同的。如果是这种情况,那么写下代码。

bool operator==(array& p) const
{
  // are size ==, yes they are hard coded to 20 ! not a good plan
  for (int i = 0; i < 20 ; i++)
  {

     if(a[i] != p.a[i])
        return false;
  }
  return true;
}

您编写的代码表示如果两个数组具有相同的地址则相等。即如果它是相同的阵列。也许这就是你的意思

答案 2 :(得分:1)

您无法比较这样的数组:

"~/Scripts/jquery.unobtrusive-ajax.min.js"

这会将点数组衰减到指针并只进行指针比较。只有if (p.a != arr) 时,指针比较才会成立,这不是您想要的。您需要实际手动比较数组中的所有元素:

&p == this

或者你可以使用算法std::equal

bool operator==(array const& p) const {
    for (int i = 0; i < SIZE; ++i) {
        if (arr[i] != p.arr[i]) {
            return false;
        }
    }
    return true;
}    

或者您可以改为使用std::array,它为您定义了自己的bool operator==(array const& p) const { return std::equal(std::begin(arr), std::end(arr), std::begin(p.arr)); }

operator==

虽然这可能会破坏练习的整个目的。

答案 3 :(得分:0)

您需要使用std算法来简化此代码。

比较平等使用std::equal

输入,std::copy&amp;&amp; std::istream_iterator

要填写固定值,请参阅here

如上所述,你可以使用std::array代替自己的课程,而不是增加太多。

所有这些技术都在&#34;有效STL&#34;作者:Scott Myers

最后,如果您发现输入开始/结束乏味,您可以尝试boost range库,但我建议先学习标准版本。