2014-10-08 7 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

+0

Добавить попытку поймать и распечатать исключение, что такое исключение? – Niall

+2

Вы не инициализируете 'ip', поэтому' * ip> top' делает ... что? Вы также не проверяете ввод пользователя 'n'. – crashmstr

ответ

2

Вы разыменование неинициализированного итератора, вы хотите что-то подобное:

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

Это часть истории. Это будет оставаться недействительным всякий раз, когда вектор растет. –

+0

Работает только в том случае, если v содержит значение, то есть сначала push_back (2) сверху, а затем вашу строку кода. – chrizke

+1

За исключением того, что, если вектор изменяет размер, он, вероятно, аннулирует итератор. Даже не уверен, что они пытаются сделать, но индекс, вероятно, проще. – crashmstr

Смежные вопросы