我试图逐个元素地比较两个int数组,以检查是否相等。我似乎无法让这个工作。基本指针资源也欢迎。谢谢!
int *ints;
ints = new int[10];
bool arrayEqual(const Object& obj)
{
bool eql = true;
for(int i=0; i<10; ++i)
{
if(*ints[i] != obj.ints[i])
eql = false;
}
return eql;
}
答案 0 :(得分:15)
以下怎么样?
#inlcude <algorithm> bool arrayEqual(const Object& obj) { return std::equal(ints,ints + 10, obj.ints); }
注意:相等的函数要求两个数组的大小相等。
答案 1 :(得分:2)
我很惊讶没有人问你为什么要首先使用数组。虽然有些地方阵列很难避免,但它们之间的距离很小。大多数代码通常使用std :: vector更简单。由于std :: vector重载了operator ==,在这种情况下你需要做的就是像if (a==b) ...
这样的东西即使在少数地方那个向量不合适的地方,TR1 :: array也经常做这个工作(和IIRC) ,它提供了运算符==的重载。
答案 2 :(得分:2)
当您执行if(*ints[i] != obj.ints[i])
时,您要比较的是ints[i]
指向的内容obj.ints[i]
,而不是ints[i]
本身的内容。这是因为数组的名称已经是指向数组第一个元素的指针,当您添加下标时,您将在该数组中的第一个元素之后查找第i个位置。这就是为什么你不需要*
。
正确的是:
int *ints;
ints = new int[10];
bool arrayEqual(const Object& obj)
{
bool eql = true;
for(int i=0; i<10; ++i)
{
if(ints[i] != obj.ints[i])
eql = false;
}
return eql;
}
希望我帮忙!
答案 3 :(得分:0)
我认为这完全由“class Object {”和“}”包裹?
只需删除“*”就可以了。