我如何使用for循环比较不同大小的数组

时间:2019-09-18 21:29:56

标签: c++

我有2个数组:

arr1 = [0,1,2,3,4,5,6] arr2 = [0,1,3,3,4,6]

我正在尝试编写一个函数来比较两个数组,并使用缺失的数字创建一个新数组。

我尝试了这个for循环,但没有输出任何内容。我还能通过什么其他方式比较2个大小不同的数组?

int n = 0;
int *newArr = new int[];
for (int i = 0; i<=6; i++) {
 if (arr1[i] != arr2[i]) {
 newArr[n] = arr1[i]
 n++;
}
}
for (int j = 0; j<n; j++) {
 cout << arr[j] << endl;
}

3 个答案:

答案 0 :(得分:1)

  

我正在尝试编写一个函数来比较两个数组并创建一个   缺少数字的新数组。

您可以使用基于范围的for循环和least(a, b)来检查两个数组中是否缺少数字
然后将结果存储在std::find

示例

std::set

或使用常规的for循环

int main()
{
  int           a[] { 0, 1, 2, 3, 4, 5, 6 };
  int           b[] { 0, 1, 3, 3, 4, 6    };
  std::set<int> c;

  for (auto const& i : a)
    if (std::find(std::begin(b), std::end(b), i) == std::end(b))
      c.insert(i);

  for (auto const& i : b)
    if (std::find(std::begin(a), std::end(a), i) == std::end(a))
      c.insert(i);
}

答案 1 :(得分:0)

尝试这样的事情:

int arr1[] = {0, 1, 2, 3, 4, 5, 6};
int size_arr1 = 7;

int arr2[] = {0, 1, 3, 3, 4, 6};
int size_arr2 = 6;

int *newArr = new int[size_arr1 + size_arr2];
int n = 0;

for (int i = 0; i < size_arr1; i++) {
    newArr[n++] = arr1[i];
}

for (int i = 0; i < size_arr2; i++) {
    bool found = false;
    for (int j = 0; j < n; j++) {
        if (arr2[i] == newArr2[j]) {
            found = true;
            break;
        }
    }
    if (!found)
        newArr[n++] = arr1[i];
}

for (int i = 0; i < n; i++) {
    cout << newArr[i] << endl;
}

delete[] newArr;

从两个数组中收集唯一数字的另一种方法是改用std::setstd::unsorted_set,例如:

#include <unordered_set>

int arr1[] = {0, 1, 2, 3, 4, 5, 6};
int arr2[] = {0, 1, 3, 3, 4, 6};
set::unsorted_set newArr;

for(int num : arr1) {
    newArr.insert(num);
}

for(int num : arr2) {
    newArr.insert(num);
}

for (int num : newArr) {
   std:: cout << num << endl;
}

答案 2 :(得分:0)

您已在代码中(即在堆上)动态声明了数组,并使用数字对其进行初始化并不是那么简单。您还将分配一个大小为0的数组。如果在堆栈上声明数组,则可以使用嵌套的for循环来实现您想要的功能。

但是请注意,对于大型数据集,这将是低效的。如果您想研究二进制搜索算法。

#include <iostream>

int main()
{
    int arr1Size = 6;
    int arr2Size = 8;

    int arr1[] = { 2, 5, 7, 12, 45, 65 };
    int arr2[] = { 2, 5, 6, 10, 32, 65, 98, 123 };


    for (int i = 0; i < arr1Size; i++)
    {
        for (int j = 0; j < arr2Size; j++)
        {
            if (arr1[i] == arr2[j])
            {
                std::cout << arr1[i] << std::endl;
            }
        }
    }
}