2016-07-16 160 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