【发布时间】:2022-06-16 22:10:21
【问题描述】:
为什么这段代码会出现运行时错误:
在抛出 'std:length_error' 的实例后调用终止 what(): basic_string::_M_create.
将comp函数中的条件更改为s1.size() < s2.size()时给出正确答案。
static bool comp(const string& s1,const string& s2){
return s1.size()<=s2.size();
}
int main()
{
int n;
cin>>n;
vector<string> words(n);
for(int i=0;i<n;++i){
cin>>words[i];
}
sort(words.begin(),words.end(),comp);
for(int i=0;i<n;++i){
cout<<words[i]<<" ";
}
return 0;
}
【问题讨论】:
-
排序的比较参数必须满足Compare named requirement 在你的情况下它不满足,所以你得到未定义的行为。您的确切错误的可能原因可能是迭代器越过了 end 运算符,因为它依赖于例如事实上,
comp关系是反反身的 -
将
s1.size()<=s2.size()更改为s1.size()<s2.size()以使您的代码有效。 仅如果第一个参数必须在第二个之前排序,排序比较器必须返回true。您编写了一个比较器,它将声称"AB"必须在"CD"之前排序并且"CD"必须在"AB"之前排序。这是不可能满足的。
标签: c++ comparator