这段代码为什么会产生运行时错误?

问题描述:

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

请正确格式化您的代码。你被低估为遗忘。 – PaulMcKenzie

+1

目前尚不清楚,但您似乎并未声明矢量类型。 vector是一个模板,因此需要一个类型来容纳在容器中的向量。 E.g载体。你确定这是一个运行时错误吗?代码是否编译? –

+0

用'a.at(k)'替换'a [k]'。你将学习使用'at()'来解决你自己的问题,使用out-of-bounds访问(而不是分段错误或崩溃)的美妙之处。 – PaulMcKenzie

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; 

问题在于你通过[k]访问vector。

向量a是一个空向量,不能用[k]来访问。

您需要使用a.push_back(nums [i]);一些尺寸像载体的

声明向量a(10); 然后用[k]访问它。