[英]Merging two sorted array on third by creating a new array on heap
我有一个 class 数组,我在其中声明了一个数组的大小和长度。 我试图通过在堆上创建第三个数组来合并两个排序的 arrays,并且两个排序的数组都将合并到第三个数组上。 但是每当我在堆上创建一个新的 arr 时,编译器都会给我这个错误:request for member '..' in '..' which is of non-class type
class Array
{
public:
int A[10];
int length;
int Size;
};
void display(Array arr)
{
int i;
for(i=0;i<arr.length;i++)
{
cout<<arr.A[i]<<" ";
}
}
void Merge(Array *arr1,Array *arr2)
{
int i,j,k;
i=j=k=0;
int *arr3;
arr3=new int[10];
while(i<arr1->length && j<arr2->length)
{
if(arr1->A[i]<arr2->A[j])
arr3->A[k++]=arr1->A[i++];
else
arr3->A[k++]=arr2->A[j++];
}
for(;i<arr1->length;i++)
{
arr3->A[k++]=arr1->A[i];
}
for(;j<arr2->length;j++)
{
arr3->A[k++]=arr1->A[j];
}
}
int main()
{
Array arr1{{1,3,5,7},4,4};
Array arr2{{2,4,6,8},4,4};
Array *arr3;
arr3=Merge(&arr1,&arr2);
display(*arr3);
return 0;
}
所有问题的根本原因是您使用了神奇大小为 10 的 C 样式数组。就像int A[10];
. 这是一个主要问题,应该在 C++ 中避免。
此外,同样地,在 C++ 中,我们通常不对拥有的内存或new
内存等使用原始指针。
反正。 如果两个 Array 类中的元素数都大于 5,则设计将永远无法工作。因为那样你肯定会遇到越界问题。
您必须使用std::vector
。
所以,一切都很糟糕。 但我知道我现在会听到,老师说,no vector
but new
。 老师应该被解雇或开始教 C 而不是 C++。
无论如何,我会再次为您修复主要错误。 但是排序算法都不起作用。
所以,
带有一些修复的代码示例:
#include <iostream>
class Array
{
public:
int A[10];
int length;
int Size;
};
void display(Array arr)
{
int i;
for (i = 0; i < arr.length; i++)
{
std::cout << arr.A[i] << " ";
}
}
Array* Merge(Array* arr1, Array* arr2)
{
int i, j, k;
i = j = k = 0;
Array *arr3 = new Array;
while (i < arr1->length && j < arr2->length)
{
if (arr1->A[i] < arr2->A[j])
arr3->A[k++] = arr1->A[i++];
else
arr3->A[k++] = arr2->A[j++];
}
for (; i < arr1->length; i++)
{
arr3->A[k++] = arr1->A[i];
}
for (; j < arr2->length; j++)
{
arr3->A[k++] = arr1->A[j];
}
arr3->length = arr1->length + arr2->length;
return arr3;
}
int main()
{
Array arr1{ {1,3,5,7},4,4 };
Array arr2{ {2,4,6,8},4,4 };
Array* arr3;
arr3 = Merge(&arr1, &arr2);
display(*arr3);
delete[]arr3;
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.