ここにある自己定義の比較ルールを使用して、それほど小さくない文字列のベクトルをソートしようとしています:
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 ソートを使用すると、そうはなりません。
そのため、リークがどこにあるのかわかりません。ここで何らかのヒントを期待しています。