我有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;
}
答案 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::set
或std::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;
}
}
}
}