涉及向量的初学者代码,SEIGSEV运行时错误

时间:2016-05-31 07:25:02

标签: c++ vector

#include <iostream>
#include <vector>

using namespace std;
int ways(vector<int> & ,int);

int main()

{
    int test;                       //TEST CASE
    cin>>test;
    for(int i=0 ; i<test ; i++)

    {   
        int n,k;                        // 'n' INPUT TOTAL NUMBER OF BOXES.
                                        // EACH HAVING SOME NUMBER IN IT.
        cin>>n;
        vector<int> A;

        cout<<endl;

        for(int j=0 ; j<n ; j++)        // inputs numbers inside all the boxes.
        cin>>A[j];

        cout<<endl;

        cin>>k;                         // input k                                 

        int ans = ways(A,k);            // find total ways to pick BOXES.  
        cout<<endl<<ans;                // such that sum in 2 boxes equals k.
    }

return 0;
}


int ways(vector<int> &B , int k)        // function , passing vector and k .

{
    int n = B.size();
    int count=0;
    for(int i=0 ; i<n-1 ; i++)
        for(int j=i+1 ; j<n ; j++)

            { if((B[i]+B[j])==k)
                count++;
            }
    return count;

}

初学者程序员在这里,我已经长期坚持这段代码,我已经在评论中解释了它的含义,并且我遇到了运行时错误!请帮忙!

我是向量的新手,所以只是试图解决它,我在向量声明之前尝试了const关键字并且也没有取得任何成功,它给出了一些其他错误:(

1 个答案:

答案 0 :(得分:0)

让我们来看看这些内容:

vector<int> A;
....
for(int j=0 ; j<n ; j++)        // inputs numbers inside all the boxes.
    cin>>A[j];

第一行将A定义为int 向量。然后在循环中尝试使用索引到向量中,该向量仍为空。任何空向量的索引都将超出范围,并导致未定义的行为

有两种解决方案:

  1. 您需要将push back个元素放入向量中,例如

    for(int j=0 ; j<n ; j++)        // inputs numbers inside all the boxes.
    {
        int t;
        cin >> t;
        A.push_back(t);
    }
    
  2. 您创建了一个尺寸设置为

    的矢量
    vector<int> A(n);