[英]Softball C++ question: How to compare two arrays for equality?
我试图比较两个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;
}
接下来呢?
#inlcude <algorithm> bool arrayEqual(const Object& obj) { return std::equal(ints,ints + 10, obj.ints); }
注意:equal函数要求两个数组的大小相等。
我很惊讶没有人问您为什么要首先使用数组。 虽然在某些地方很难避免使用数组,但它们之间相距甚远。 通常,使用std :: vector可以简化大多数代码。 由于std :: vector重载了operator ==,因此在这种情况下,您所要做的只是if (a==b) ...
即使在少数几个不适合使用vector的地方,TR1 :: array也会经常这样做作业(以及IIRC,它也提供了operator ==的重载)。
当执行if(*ints[i] != obj.ints[i])
,您要比较的是ints[i]
指向的地址与obj.ints[i]
的内容,而不是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;
}
希望我能帮上忙!
我认为这全都由“类Object {”和“}”包裹了吗?
只需删除“ *”,它应该可以工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.