Boost Random ライブラリのより一般的な使用方法については、この関連する質問を参照してください。
私の質問には、 からランダムな要素を選択し、std::list
何らかの操作を実行することが含まれます。これには、リストから要素を削除し、別のランダムな要素を選択することが含まれる可能性があります。条件が満たされるまで。
ブースト コードと for ループは、おおよそ次のようになります。
// create and insert elements into list
std::list<MyClass> myList;
//[...]
// select uniformly from list indices
boost::uniform_int<> indices( 0, myList.size()-1 );
boost::variate_generator< boost::mt19937, boost::uniform_int<> >
selectIndex(boost::mt19937(), indices);
for( int i = 0; i <= maxOperations; ++i ) {
int index = selectIndex();
MyClass & mc = myList.begin() + index;
// do operations with mc, potentially removing it from myList
//[...]
}
私の問題は、要素に対して実行される操作によって要素が削除されるとすぐに、variate_generator がリスト内の無効なインデックスを選択する可能性があることです。特に time(0) でシードする場合、variate_generator を毎回完全に再作成するのは意味がないと思います。