C++ 在抛出';标准:长度误差';
这是我在这里的第一篇文章。因为我是新手,这个问题可能很愚蠢。我正在编写一段代码,同时显示以下错误消息 在抛出“std::length_error”实例后调用terminate what():基本字符串::\u S\u创建 /home/gcj/决赛/home/gcj/资格赛(如果中止) 以下是违规代码,尤其是第39行到第52行。这对我来说很奇怪,因为这段代码与第64行到第79行几乎相同C++ 在抛出';标准:长度误差';,c++,C++,这是我在这里的第一篇文章。因为我是新手,这个问题可能很愚蠢。我正在编写一段代码,同时显示以下错误消息 在抛出“std::length_error”实例后调用terminate what():基本字符串::\u S\u创建 /home/gcj/决赛/home/gcj/资格赛(如果中止) 以下是违规代码,尤其是第39行到第52行。这对我来说很奇怪,因为这段代码与第64行到第79行几乎相同 int main(){ std::矢量目录,需要; std::字符串tmp_str; std::ifstre
int main(){
std::矢量目录,需要;
std::字符串tmp_str;
std::ifstream fp_in(“small.in”);
标准::流fp_输出(“输出”);
字符串::迭代器iter\u substr\u begin,iter\u substr\u end;
std::字符串斜杠(“/”);
int T,N,M;
fp_in>>T;
for(int t=0;ttmp_str;
直接推回(tmp_街);
tmp_str.clear();
}
对于(int m=0;m>tmp_str;
需要。推回(tmp_街);
tmp_str.clear();
}
对于(std::vector::iterator iter=dirs.begin();iter!=dirs.end();iter++){
for(std::string::iterator iter_str=(*iter).begin()+1、 iter_str在迭代过程中,您正在向dirs
和need
向量添加项。这是不允许的:如果添加项需要重新分配,它将使所有现有迭代器无效,并且在下次访问它们时可能导致各种错误。我不知道正确的方法是什么,但因为它是错误的d要找到这个答案,我将把它放在这里。“在抛出'foo'后调用terminate
”只是意味着任何try…catch
子句都没有捕获异常。请标记第39行到第52行。SO中没有行号。看起来您正在做大量工作来强制执行dir
和need
是唯一的。可能会从vector
切换到set
,并且它会自动执行。除非你简化,否则人们不会提供帮助。1)代码不完整,无法编译。2)如果没有相同的输入文件,我们如何以与你相同的方式测试它?3)行号不太可能与其他人的行号匹配(用注释标记错误代码).我怀疑这是你的问题,但你应该用!=
而不是
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();
}