我正在尝试使用自定义比较规则对一个不那么小的字符串向量进行排序,如下所示:
bool lexGraph(string const &str1, string const &str2)
{
string::const_iterator i1 = str1.begin(), i2 = str2.begin();
while((i1 < str1.end()) && (i2 < str2.end()))
{
if(*i1 == ' ')
{
i1++;
continue;
}
if(*i2 == ' ')
{
i2++;
continue;
}
if(toupper(*i1) < toupper(*i2))
{
return true;
}
if(toupper(*i1) > toupper(*i2))
{
return false;
}
i1++, i2++;
}
return (str1.length() <= str2.length());
}
我在这个循环中使用它:
vector<string> subset;
ifstream fin(input);
ofstream fout(output);
string buff;
for(long i = 0; i < 241; i++)
{
getline(fin,buff);
buff += '\n';
subset.push_back(buff);
}
sort(subset.begin(), subset.end(),lexGraph);
我发现向量大于 240 时会发生溢出错误。我发现如果我使用较小的文件,这个数字甚至会变得更小。此外,字符串从来都不是很大。如果我将我的功能缩减为
bool lexGraph(string const &str1, string const &str2)
{
return (str1.length() <= str2.length());
}
错误仍然发生。但是当我使用没有额外参数的 STL 排序时它不会。
所以,我不知道泄漏在哪里,我希望在这里得到一些提示。