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

how do i use a for loop to compare arrays of different sizes

本文关键字:数组 比较 何使用 for 循环      更新时间:2023-10-16

我有 2 个数组:

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

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

我尝试了这个循环,但它没有打印出任何东西。还有什么其他方法可以比较 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;
}

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

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

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);
}

或使用常规 for 循环

for (auto it = std::begin(a); it != std::end(a); ++it)
if (std::find(std::begin(b), std::end(b), *it) == std::end(b))
c.insert(*it);

尝试这样的事情:

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;
}

您已经在代码中动态声明了数组(即在堆上(,并且用数字初始化它们并不那么简单。您还将分配一个大小为 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;
}
}
}
}