C++将2个已排序的数组合并为1个已排序数组

C++ Merging 2 sorted arrays into 1 sorted

本文关键字:数组 排序 1个 合并 C++ 2个      更新时间:2023-10-16

所以我尝试将两个排序的数组合并为一个,我得到了非常奇怪的数字,比如输出。这是我的代码:

    #include<iostream>
    using namespace std;
   int* add(int first[],int second[], int sizeFirst, int sizeSecond)
   {
        int result[sizeFirst + sizeSecond];
        int indexFirst = 0,indexSecond = 0;
        for(int i = 0;i < sizeFirst + sizeSecond;i++)
        {
           if(indexFirst == sizeFirst || first[indexFirst] > second[indexSecond])
           {
               result[i] = second[indexSecond];
               indexSecond++;
           }
           else
           {
                result[i] = first[indexFirst];
                indexFirst++;
           }
        }
      return result;
    }
    int main()
    {
        int n;
        cin>>n;
        int arr[n];
        for(int i = 0;i < n;i ++)
            cin>>arr[i];
        int m;
        cin>>m;
        int arr2[m];
        for(int i = 0;i < m;i ++)
            cin>>arr2[i];
        int *res;
        res = add(arr,arr2,n,m);
        for(int i = 0;i < n + m;i ++)
            cout<<res[i]<<" ";
        return 0;
    }

注意:它对它进行了适当的分类,所以错误不存在。我还需要把它作为一个函数来做,因为我稍后会需要它来做一些其他的事情。

 return result;

您正在返回一个指向本地数组的指针,该指针随后立即被销毁——这是未定义的行为。您应该使用new或使用std::vector(首选)进行分配。

此外,int result[sizeFirst + sizeSecond];不是有效的C++,因为标准不允许可变大小的数组(但int* result = new int[sizeFirst + sizeSecond];是有效的)。