См. Этот связанный вопрос о более общем использовании библиотеки 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 может выбрать недопустимый индекс в списке. Я не думаю, что имеет смысл полностью воссоздавать variate_generator каждый раз, особенно если я засеваю его временем (0).