2016-07-16 90 views
-2

我有一個代碼塊,我聲明瞭四個向量,初始化它們中的兩個。然後我有兩個for循環,我將元素添加到未初始化的向量中。最後,我將一個向量的所有元素重新分配給另一個向量。向量下標超出範圍問題

但是在做這些時我得到這個錯誤 - 「Vector下標超出範圍」。我正在做的任何操作,我做錯了向量?

我的代碼:

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

指數從'0'到'大小1'。你的for()'循環從'1'到'size'。所以最後一次迭代訪問矢量之外。 – Barmar

回答

0

這就是問題所在:

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

矢量指數從0開始,最高指數爲K.size()-1。當i達到K.size()時,K[i]將在向量外訪問。

它應該是:

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

感謝您的回覆,但錯誤仍然存​​在.. – David

+0

哪一行發生錯誤? – Barmar

+0

現在正常工作,謝謝Bamar – David