簡體   English   中英

通過在堆上創建一個新數組在第三個上合並兩個排序數組

[英]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++。

無論如何,我會再次為您修復主要錯誤。 但是排序算法都不起作用。

所以,

  • 如果你想返回一個數組,然后更改你的 function 的簽名並返回一個數組。
  • 您確實想要一個新數組,而不是新整數。 所以,請改為分配一個新數組。
  • 不要忘記在最后發布新的 Arrary。
  • 設置新數組的大小和長度。
  • 重構您的完整代碼。

帶有一些修復的代碼示例:

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM