• ベストアンサー

STLのlistとrandを使うと異常終了します

STLの勉強をしているものです。VisualC++6.0で正常に動作するプログラムをVusialC++2008ExpressEditionで動かしたら異常終了しました。色々調べていくと、乱数値をセットしたlistをマージするときに異常終了するようです。尚、異常終了するのはDebugビルドのときのみで、Releaseビルドのときは正常に動作します。異常終了するプログラムを以下に載せておきます。どなたかご教授お願い申し上げます。 #include<list> #include <time.h> #include <stdlib.h> using namespace std; int main(int argc, char* argv[]){ list<int> lst1, lst2; int i, n; srand(time(NULL)); for( i = 0 ; i < 5 ; i++ ){ n=rand() % 10; lst1.push_back( n ); } for( i = 0 ; i < 5 ; i++ ){ n=rand() % 10; lst2.push_back( n ); } lst1.merge( lst2 ); // リストをマージ ここで異常終了 return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんにちは。  昇順にソートされていないと、デバッグビルド時ではマクロでランタイムエラーを発生させる様です(無視のボタンを数回押せば通過は出来ます・・・)。  マージする前に、lst1,lst2を昇順ソートするか、  lst1.sort();  lst2.sort();  lst1.merge( lst2 );  順番に関係なくただ合成したければ、  lst1.splice(lst1.end(), lst2);  と書けば良いのではないでしょうか。

cyacya2000
質問者

お礼

ありがとうございました。 spliceは知りませんでした。 勉強になりました。

その他の回答 (1)

回答No.2

list<T>::merge はソートされた状態にあるふたつのlistをマージ(併合)するものです。 「lst1,lst2はmergeに先立ってソートされていなければならない」 と言語規格に明記されています。

cyacya2000
質問者

お礼

ありがとうございました。 言語規格を読み直します。