См. связанный вопрос о более общем использовании библиотеки Boost Random.
Мои вопросы включают в себя выбор случайного элемента из std::list
, выполнение некоторой операции, которая могла бы потенциально включать удаление элемента из списка, а затем выбор другого случайного элемента до тех пор, пока не будет выполнено некоторое условие.
Код повышения и цикл выглядят примерно так:
// 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).