簡體   English   中英

使用 Array 的結構在堆中創建動態數組

[英]creating a array dynamic in heap using struct of Array

下面的代碼用於合並到 arrays,這里的問題是它沒有在堆中動態創建數組,因此 arr3 可用於合並兩個 arrays。

#include <iostream>

using namespace std;


struct Array{
    int a[10];
    int size;
    int length;
};

void Display(Array arr){
cout<<"Elements in array are ";
    for(int i=0;i<arr.length;i++){
        cout<<arr.a[i]<<" ";
    }
cout<<"\n\n\n";
}

Array* MergeArrays(Array *arr1,Array *arr2){

int i,j,k;

    i=j=k=0;

//here not creating an array in heap

  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(;i<arr2->length;j++){
        arr3->a[k++]=arr2->a[j++];
    }
    arr3->length=arr1->length+arr2->length;
    arr3->size=20;
    return arr3;
}

int main()
{

    Array arr1={{24,5,33,2,7,3},20,6};
    Array arr2={{22,6,8,12,15,9},20,6};
    Array *arr3;
    arr3=MergeArrays(&arr1,&arr2);
    Display(*arr3);
}

請幫助通過合並 arr1 和 arr2 的長度在堆中動態創建數組

創建一個動態數組結構被傳遞給 arr3 指針。

顯示 function 后調用打印 arrays 的合並

有很多問題。

  1. struct 中的數組太小

    詮釋一個[10];

只能容納 10 個元素,但您有 2 * 6 = 12 個要保存的元素。

您可能打算這樣做:

int a[10];
  1. 輸入未排序。

您似乎想以排序方式合並 arrays ,但這需要從一開始就對輸入進行排序。

  1. 缺少索引增量

    而(ilength && jlength){

     if(arr1->a[i]<arr2->a[j]){ arr3->a[k++]=arr1->a[i]; }else{ arr3->a[k++]=arr2->a[j]; }

    }

你在哪里改變ij

你可能想要

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

但...

如果在 C++ 中編碼,請不要執行上述代碼!

C++ 具有std::vector可以為您完成所有這些工作 - 以及更多。 例如 - 與您的struct不同 - std::vector (自動)在需要時會增大大小。 將它與“算法庫”中的函數一起使用,您將在幾分鍾內完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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