2014-10-08 38 views
-4
#include<bits/stdc++.h> 
using namespace std; 
int main() 
{ 
    vector <int> v; 
    vector<int> :: iterator ip; 
    v.push_back(2); 
    for(int i=3;i<=32000;i+=2) 
    { 
     int top; 
     top = sqrt(i)+1; 
     int flag=0; 
     if(*ip>top) break; 
     if(i%*ip==0) 
     { 
      flag=1; 
      break; 
     } 
     if(flag==0) 
     { 
      v.push_back(i); 
     } 
    } 
    int t; 
    cin>>t; 
    while(t--) 
    { 
     int n; 
     cin>>n; 
     cout<<v.at(n)<<endl; 
    } 
    return 0; 
} 

可以請你解釋爲什麼我的代碼出現運行時錯誤。 矢量的大小超出範圍? 我不知道爲什麼我在這段代碼中得到錯誤的答案,雖然我的代碼非常好。爲什麼矢量的大小超出範圍

+1

哪條線做了,當你在調試器中運行它的程序停止? – cdhowie 2014-10-08 16:50:18

+0

添加try catch並打印出異常,異常說明了什麼? – Niall 2014-10-08 16:51:05

+2

你不初始化'ip',所以'* ip> top'確實......什麼?你也不會檢查用戶輸入'n'。 – crashmstr 2014-10-08 16:51:13

回答

2

你訪問一個未初始化的迭代器,你想要的東西更像:

vector<int>::iterator ip = v.begin(); 
+0

這是故事的一部分。隨着矢量的增長,這將繼續失效。 – 2014-10-08 16:54:40

+0

僅當v包含一個值時才起作用,即先從上面push_back(2),然後是你的代碼行。 – chrizke 2014-10-08 16:54:41

+1

除了如果向量重新調整大小,它可能會使迭代器無效。甚至不知道他們想做什麼,但索引可能更簡單。 – crashmstr 2014-10-08 16:54:56