编写一个包含整数数组的数组作为数据成员。该类包含以下成员函数:
问题:我无法弄清楚如何使用==运算符进行比较。
我的代码:
#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;
}
答案 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库,但我建议先学习标准版本。