为什么这段代码会给出运行时错误?

时间:2016-06-28 06:52:51

标签: c++

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        sort(nums1.begin(),nums1.end());
        sort(nums2.begin(),nums2.end());
        vector<int> a;
        int i=0,j=0,k=0;
        while(i<nums1.size()&&j<nums2.size())
        {
            if(nums1[i]>nums2[j])
            {
                j++;
            }
            else if(nums1[i]<nums2[j])
            {
                i++;
            }
            else
            {
                if(a.empty() || a.back() != nums1[i])
                {
                    a[k]=nums1[i];
                }
                i++;
                j++;
                k++;
            }
        }
        return a;
    }
};

2 个答案:

答案 0 :(得分:0)

a被声明为空向量,因此除非a中有任何元素,否则您无法访问a的元素。 你想要

  a.push_back(nums[i]);

而不是

  a[k] = nums1[i]; //a is declared as empty vector so you have to push elements to it.

OR

你可以做到

vector<int> a(num1.size());

而不是

vector<int> a;

答案 1 :(得分:-1)

问题在于您通过[k]访问向量。

无法使用[k]访问a为空向量的向量。

您需要使用 a.push_back(nums [i]);

声明某个大小的向量,如向量a(10); 然后用[k]访问它。