void insert_string(std::vector<std::string> & strings, const std::string &s)
{
std::vector<std::string>::iterator it=lower_bound(strings.begin(),strings.end(),s);
if(strings.size()>0) std::cout<<*it<<" is found\n"; // ****
strings.insert(it,s);
}
当试图使用此功能时,第一次插入会很好。第二次插入将输出“找到[firststring]”,然后segfault。如果我注释掉if/cout行,我可以重复调用并且不会发生段错误。C++:为什么取消引用这个向量迭代器段错误?
我也试过做一些像std::string tmp=*it;
那样会在那条线上发生段错误。虽然打印并不是什么大问题,但我真正想要做的是检查lower_bound找到的位置上的字符串是否与尝试插入的字符串相同(即,if(*it==s)
,它是像段以上两个例子)。
我在这里错过了什么?
谢谢!
当然你的意思是if(it!= strings.end())std :: cout << * it <<“找到了\ n”;'? – Flexo 2012-03-07 09:20:30
对不起,我不应该使用“找到”一词;我只是想打印迭代器的价值是什么,而不是试图暗示字符串's'实际上是在这个向量中找到的(尽管这最终是我想要做的)。 – Joseph 2012-03-07 09:21:56