2016-07-16 22 views
-2

私は4つのベクトルを宣言し、そのうちの2つを初期化するコードブロックを持っています。次に、2つのforループがあります。ここでは、初期化されていないベクトルに要素を追加しています。最後に、あるベクトルのすべての要素を別のベクトルに再割り当てします。ベクトルの添え字が範囲外にある問題

これらを実行しているうちに、このエラーが発生しています。「Vector Subscript out of range」。私が間違っているベクタに対して何か操作していますか?

マイコード:

int main() 
{ 
    std::vector<int> K; 
    K.insert(K.begin(),0); 
    std::vector<int> tempK; 
    std::vector<int> S; 
    S.insert(S.begin(),0); 
    std::vector<int> tempS; 
    int n; 
    float exptd = 0; 
    float SD = 0; 
    std::cout<<"How many steps: "; 
    std::cin >> n; 
    for (int j= 1; j<=n; j++) { 
     for (int i=1; i<=K.size(); i++) { 
      if (K[i] == 0) { 
       tempK.push_back(4); tempK.push_back(6); 
       tempS.push_back(K[i]+4); tempS.push_back(K[i] +6); 
      } 
      else if (K[i] == 1) { tempK.push_back(6); tempK.push_back(8); 
       tempS.push_back(K[i]+6); tempS.push_back(K[i] +8); 
      } 
      else if (K[i] == 2) { 
       tempK.push_back(7); tempK.push_back(9); 
       tempS.push_back(K[i]+7); tempS.push_back(K[i] +9); 
      } 
      else if (K[i] == 3) { 
       tempK.push_back(4); tempK.push_back(8); 
       tempS.push_back(K[i]+4); tempS.push_back(K[i] +8); 
      } 
      else if (K[i] == 4) { 
       tempK.push_back(3); tempK.push_back(9); tempK.push_back(0); 
       tempS.push_back(K[i]+3); tempS.push_back(K[i] +9); 
       tempS.push_back(K[i] +0); 
      } 
      else if (K[i] == 6) { 
       tempK.push_back(1); tempK.push_back(7); tempK.push_back(0); 
       tempS.push_back(K[i]+1); tempS.push_back(K[i] +7); 
       tempS.push_back(K[i] +0); 
      } 
      else if (K[i] == 7) { 
       tempK.push_back(2); tempK.push_back(6); 
       tempS.push_back(K[i]+2); tempS.push_back(K[i] +6); 
      } 
      else if (K[i] == 8) { 
       tempK.push_back(1); tempK.push_back(3); 
       tempS.push_back(K[i]+1); tempS.push_back(K[i] +3); 
      } 
      else if (K[i] == 9) { 
       tempK.push_back(2); tempK.push_back(4); 
       tempS.push_back(K[i]+2); tempS.push_back(K[i] +4); 
      } 
     } 
     S = tempS; 
     tempS.clear(); 
     tempS.resize(100); 
     K = tempK; 
     tempK.clear(); 
     tempK.resize(100); 
    } 
} 
+0

インデックスは 'サイズ-1 'に' 0 'から行きます。 'for()'ループは '1'から' size'に向かっています。したがって、最後の繰り返しはベクトルの外側にアクセスします。 – Barmar

答えて

0

これは問題です:

for (int i=1; i<=K.size(); i++) 

ベクトルインデックスは0から始まり、最高インデックスがK.size()-1です。 iK.size()に達すると、K[i]はベクターの外側にアクセスします。

それは次のようになります。

for (int i = 0; i < K.size(); i++) 
+0

返信いただきありがとうございますが、エラーは依然として持続しています。 – David

+0

エラーはどの回線で起こっていますか? – Barmar

+0

正常に動作しました。ありがとうBamar – David

関連する問題