c++中数组内容相等

Array contents equality in C++

本文关键字:数组 c++      更新时间:2023-10-16

是否有一种方法可以让相等操作符用于比较相同类型的数组?

例如:

int x[4] = {1,2,3,4};
int y[4] = {1,2,3,4};
int z[4] = {1,2,3,5};
if (x == y) cout << "It worked!"

我知道,它只是比较指针值-但我希望有某种类型定义技巧或类似的东西,所以它不需要循环或memcmp调用。

您可以使用标准相等算法

if (std::equal(x,x+4,y)) cout << "It worked!";

使用std::equal作为:

if(std::equal(x, x+ xsize, y)) std::cout << "equal";

检查相同顺序的元素是否相等。这意味着,根据std::equal,以下数组是不相等的。

int x[4] = {1,2,3,4};
int y[4] = {1,2,4,3}; //order changed!

另一种方法是将数组包装在std::array模板中,这将为数组创建一个小包装器类。一切都很正常,除了您得到operator=的默认定义之外,因此您可以使用==作为正常来做预期的事情。

由于数组具有相同的类型和长度,您可以使用memcmp来测试是否相等,即值和位置是否相等:

int array1[4] = {1, 2, 3, 4};
int array2[4] = {5, 6, 7, 8};
if (memcmp(array1, array2, sizeof(array1)) == 0)
{
    cout << "arrays are equal" << "n";
}
else
{
    cout << "arrays are not equal" << "n";
}

我认为这里还需要注意的是,c++不允许在没有至少一个用户定义类型的情况下重载operator==。这将是一个"不错"的解决方案,但即使你可以,这也可能是一个坏主意。c++中的数组…是一种邪恶的森林生物。

std::equal可能是你最好的选择。虽然你可以用*gasp*宏做你想做的事情,但我认为这是不正常的。