這是我的第一篇文章。由於我是新手,這個問題可能很愚蠢。我寫一段代碼同時顯示以下錯誤消息,拋出'std :: length_error'實例後終止調用
終止叫做拋出 '的std :: length_error'
的實例以後有什麼():basic_string的:: _ S_create
/家/ gcj/finals/home/gcj/quals其中已中止
以下是有問題的代碼,特別是第39行到第52行。由於此代碼塊與Line64到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();
}
最好的問候, 馬克
請將第39行標記爲52. SO中沒有行號。 – kennytm 2010-05-23 17:20:25
看起來你正在做很多工作來強制'dirs'和'need'是唯一的。也許從'vector'切換到'set',它會自動執行。 – Stephen 2010-05-23 17:23:16
除非你讓事情變得簡單,否則人們不會去幫忙。 1)代碼不完整,不能編譯。 2)我們如何在沒有相同輸入文件的情況下以與您相同的方式測試它? 3)您的行號不可能與任何其他人的行號匹配(使用註釋標記錯誤代碼)。 – 2010-05-23 17:23:53