[英]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.