#include <iostream>
using namespace std;
int main()
{
int *array1 = new int [5]();
int *array2 = new int [7]();
array1[2] = 3;// or anychange
array2[2] = 3;// to both arrays
if (array1==array2)
{
//if all values of the both arrays are equal
}
else
{
//if all values of the both arrays are not equal
}
return 0;
}
我有两个动态分配的数组使用new(大小可能相同也可能不相同)。现在我要比较数组的所有元素(如果大小和元素相同,则为true,如果不是,则为false)。
如何在C ++中做? (对我的问题场景中使用向量不感兴趣)
答案 0 :(得分:0)
array1 == array2
比较指针。他们永远不会平等。此外,您无法知道动态分配的数组中有多少元素,除非您是:
-1
)来表示数组的结尾(就像c风格的字符串通常使用\0
)然后,您将能够知道要迭代的元素数量,比较两个数组的元素。
答案 1 :(得分:0)
首先,我想鼓励您使用std::vector
来动态分配数组。他们将安全自动地释放分配的内存,您可以随时检索其大小而无需额外的手动簿记。
完成后,您可以通过以下方式比较两个数组:
#include <vector>
int main()
{
std::vector<int> v1 = { 1, 2, 3 };
std::vector<int> v2 = { 1, 2, 3, 4 };
const bool theyAreEqual = v1 == v2;
}
比较两个指针,只比较第一个元素的地址,而不是元素的动态数组的大小和内容。这是其中一个原因,使用std::vector
而不是C风格的数组会更安全。
答案 2 :(得分:0)
这是一种解决方法,但在这种情况下,我强烈推荐使用矢量。
你需要长度和布尔来检查。默认情况下,check
为true,数组应使用length1
和length2
进行分配。
//...
if (length1 != length2) check = false;
else for (int i = 0; i < length1; i++)
{
if (array1[i] != array2[i])
{
check = false;
break;
}
}
if (check)
//...
答案 3 :(得分:0)
我跟进了Ralph评论,因为我也想看看std :: equal做了什么,并且std :: vector的==运算符做了正确的事情,并且使用比std :: equal运算符更简单。如果使用后者,则需要确保两个数组的用户begin()/ end()(它是std :: equal的C ++ 14版本),或者添加v1.size()== v2 .size()&amp;&amp; ...
Stratfordshire