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


#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 关键字,也没有取得任何成功,它给出了其他一些错误:(

让我们看一下这些行:

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

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

有两种解决方案:

  1. 要么你需要将元素推回向量,例如

    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);
    

相关内容

最新更新