C++ 中的合并排序数组错误:引用绑定到类型“int”的空指针(stl_vector.h)

0 c++ arrays sorting merge

https://leetcode.com/problems/merge-sorted-array/ 在这个leetcode问题中,这就是我使用的逻辑

class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
    int i = 0;
    int j = 0;
    int k = 0;
    vector<int> ans;
    
    while (i<m && j<n) {
        
        if (nums1[i] < nums2[j]){
            ans[k++] = nums1[i++];
            
        }
        else {
            ans[k++] = nums2[j++];
            
        }
    }           
    while (i<m) {
        ans[k++] = nums1[i++];
        
    }            
    while (j<n) {
        ans[k++] = nums2[j++];
    }        
    for (int h = 0; h<(m+n); h++) {
        nums1[h] = ans[h];
    }
    }
    };
Run Code Online (Sandbox Code Playgroud)

运行代码时,我收到此运行时错误。 错误图片 我该如何解决这个问题

joh*_*ohn 5

这是一个大小为零的向量

vector<int> ans;
Run Code Online (Sandbox Code Playgroud)

此代码尝试更改大小为零的向量的元素。

ans[k++] = nums1[i++];
Run Code Online (Sandbox Code Playgroud)

这就是你的错误的原因。

如果要将元素添加到向量的末尾,请使用push_back

ans.push_back(nums1[i++]);
Run Code Online (Sandbox Code Playgroud)

C++ 向量不会自动更改大小,您必须使用push_backorresize或insert或类似的东西。

或者,首先将向量设置为正确的大小

vector<int> ans(m + n);
Run Code Online (Sandbox Code Playgroud)

虽然我push_back自己更喜欢这种方法。