次の単純なベクトル ソート プログラムは、2 回目のソート呼び出しで t >= 17 の場合にクラッシュします。最初の並べ替えは t == 100 の場合でも成功します。かなり長い間苦労しましたが、何が問題なのかわかりません。誰か助けてくれませんか?
MacBook Air と Linux マシンで試してみましたが、驚くべきことに、同じ結果が得られました。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct tc
{
unsigned int n;
};
bool sort_by_n( tc a, tc b )
{
return a.n <= b.n;
}
vector<tc> tcv(100);
vector<int> tv(100);
int main()
{
unsigned int t;
cin >> t;
for ( unsigned int i = 0 ; i < t ; i++ )
{
cin >> tcv[i].n;
tv[i] = tcv[i].n;
}
sort( tv.begin(), tv.begin()+t); // ## This one works even for t == 100.
sort( tcv.begin(), tcv.begin()+t, sort_by_n ); // ## This one crashes for t >= 17
return 0;
}