比较C ++中动态分配的两个数组

时间:2015-12-12 12:39:28

标签: c++ compare dynamic-arrays

#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 ++中做? (对我的问题场景中使用向量不感兴趣)

4 个答案:

答案 0 :(得分:0)

array1 == array2比较指针。他们永远不会平等。此外,您无法知道动态分配的数组中有多少元素,除非您是:

  1. 将其大小分开存储
  2. 使用sentinel值来确定其结束 - 您选择一个值(例如-1)来表示数组的结尾(就像c风格的字符串通常使用\0
  3. 然后,您将能够知道要迭代的元素数量,比较两个数组的元素。

答案 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,数组应使用length1length2进行分配。

//...
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