c++中数组内容相等
Array contents equality in C++
是否有一种方法可以让相等操作符用于比较相同类型的数组?
例如: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*宏做你想做的事情,但我认为这是不正常的。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '