- ベストアンサー
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; }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 昇順にソートされていないと、デバッグビルド時ではマクロでランタイムエラーを発生させる様です(無視のボタンを数回押せば通過は出来ます・・・)。 マージする前に、lst1,lst2を昇順ソートするか、 lst1.sort(); lst2.sort(); lst1.merge( lst2 ); 順番に関係なくただ合成したければ、 lst1.splice(lst1.end(), lst2); と書けば良いのではないでしょうか。
その他の回答 (1)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
list<T>::merge はソートされた状態にあるふたつのlistをマージ(併合)するものです。 「lst1,lst2はmergeに先立ってソートされていなければならない」 と言語規格に明記されています。
お礼
ありがとうございました。 言語規格を読み直します。
お礼
ありがとうございました。 spliceは知りませんでした。 勉強になりました。