2017-08-12 10 views
0

以下のコードはセグメンテーションフォルトを示しています。しかし、vector<int> s;vector<int> s(n)に置き換えるとすぐにコードはうまく動作します。 なぜこのようなことが起こり、サイズを事前に入力する必要があるベクターの目的が損なわれますか?サイズがあらかじめ設定されたベクトルを初期化する

#include <cmath> 
#include <cstdio> 
#include <vector> 
#include <iostream> 
#include <algorithm> 
using namespace std; 


int main() { 

    long int n,i,count=0,sum=0; 
    cin>>n; 
    string s; 
    cin>>s; 
    vector<int> s1; 
    for(i=0;i<n;i++) 
    {  
     if(s[i]=='U') 
      s1[i]=1; 
     else 
     s1[i]=-1; 
    } 

    for(i=0;i<n;i++) 
    { 

     sum+=s1[i]; 
     if((sum==0)&&(s1[i]!=(-1))) 
      count++; 
    } 

    cout<<count;  


    return 0; 
} 

答えて

0

理由は、サイズを指定しないと、要素なしで初期化されるためです。

要素がない場合、要素を設定することはできません。ループのためのあなたの最初で

for(i=0;i<n;i++) 
{  
    if(s[i]=='U') 
     s1[i]=1; 
    else 
     s1[i]=-1; 
} 

変更は、ベクターに新しい要素を追加するためにpush_backを使用します。

既存の要素を変更する場合は、通常どおりに行うことができます。

for(i=0;i<n;i++) 
{  
    if (s[i]=='U') 
     s1.push_back(1); 
    else 
     s1.push_back(-1); 
} 

この動作は、JavaScriptの配列またはPythonのリストに似ています。

関連する問題