questo è il mio primo post qui. Essendo un principiante, il problema potrebbe essere stupido. Stavo scrivendo un pezzo di codice, mentre il seguente messaggio di errore visualizzato,terminare chiamato dopo aver lanciato un'istanza di "std :: length_error"
Termina chiamata dopo aver lanciato un caso di 'std :: length_error'
cosa(): basic_string :: _ S_create
/home/gcj/finals/home/gcj/quals dove Aborted
il seguente è il codice offensivo in particolare dalla riga 39 alla linea 52. Per me è un problema perché questo blocco di codice è quasi uguale a quello da Line64 a Line79.
int main(){
std::vector<std::string> dirs, need;
std::string tmp_str;
std::ifstream fp_in("small.in");
std::ofstream fp_out("output");
std::string::iterator iter_substr_begin, iter_substr_end;
std::string slash("/");
int T, N, M;
fp_in>>T;
for (int t = 0; t < T; t++){
std::cout<<" time "<< t << std::endl;
fp_in >> N >> M;
for (int n =0; n<N; n++){
fp_in>>tmp_str;
dirs.push_back(tmp_str);
tmp_str.clear();
}
for (int m=0; m<M; m++){
fp_in>>tmp_str;
need.push_back(tmp_str);
tmp_str.clear();
}
for (std::vector<std::string>::iterator iter = dirs.begin(); iter!=dirs.end(); iter++){
for (std::string::iterator iter_str = (*iter).begin()+1; iter_str<(*iter).end(); ++iter_str){
if ((*iter_str)=='/') {
std::string tmp_str2((*iter).begin(), iter_str);
if (find(dirs.begin(), dirs.end(), tmp_str2)==dirs.end()) {
dirs.push_back(tmp_str2);
}
}
}
}
for (std::vector<std::string>::iterator iter_tmp = dirs.begin(); iter_tmp!= dirs.end(); ++iter_tmp)
std::cout<<*iter_tmp<<" ";
dirs.clear();
std::cout<<std::endl;
std::cout<<" need "<<std::endl;
//processing the next
for (std::vector<std::string>::iterator iter_tmp = need.begin(); iter_tmp!=need.end(); ++iter_tmp)
std::cout<<*iter_tmp<<" ";
std::cout<<" where ";
for (std::vector<std::string>::iterator iter = need.begin(); iter!=need.end(); iter++){
for (std::string::iterator iter_str = (*iter).begin()+1; iter_str<(*iter).end(); ++iter_str){
if ((*iter_str)=='/') {
std::string tmp_str2((*iter).begin(), iter_str);
if (find(need.begin(), need.end(), tmp_str2)==need.end()) {
need.push_back(tmp_str2);
}
}
}
}
for (std::vector<std::string>::iterator iter_tmp = need.begin(); iter_tmp!= need.end(); ++iter_tmp)
std::cout<<*iter_tmp<<" ";
need.clear();
std::cout<<std::endl;
//finish processing the next
}
for (std::vector<std::string>::iterator iter= dirs.begin(); iter!=dirs.end(); iter++)
std::cout<<*iter<<" ";
std::cout<<std::endl;
for (std::vector<std::string>::iterator iter= need.begin(); iter!=need.end(); iter++)
std::cout<<*iter<<" ";
std::cout<<std::endl;
fp_out.close();
}
migliori saluti, Mark
Si prega di contrassegnare le righe da 39 a 52. Non ci sono numeri di riga in SO. – kennytm
Sembra che tu stia facendo un sacco di lavoro per far rispettare che 'dirs' e' need' sono unici. Magari passa da 'vector' a' set', e lo farà automaticamente. – Stephen
Le persone non saranno d'aiuto se non lo renderai facile. 1) Il codice non è completo e non viene compilato. 2) Come possiamo testarlo allo stesso modo di te senza lo stesso file di input? 3) È improbabile che i numeri di riga corrispondano ai numeri di riga di altri (contrassegnare il codice errato con un commento). –