请参阅有关 Boost Random 库的更通用使用的相关问题。
我的问题涉及从 a 中选择一个随机元素std::list
,执行一些操作,这可能包括从列表中删除该元素,然后选择另一个随机元素,直到满足某个条件。
boost 代码和 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 就有可能在列表中选择无效索引。我认为每次完全重新创建 variate_generator 是没有意义的,特别是如果我用 time(0) 播种它。