函数对象 randomElementByWeight 构造函数是否会在循环中的每次迭代中被调用,或者编译器是否可以以某种方式对其进行优化?我想确保每次迭代都调用 rand 函数,并且我认为将它放在函数对象构造函数中会更好。
struct randomElementByWeight
{
double randomNumber;
randomElementByWeight() : randomNumber(rand() / static_cast<double>(RAND_MAX)) {}
bool operator()(const Element& e)
{
if ( (randomNumber -= e.weight) <= 0.0 )
{
return true;
}
return false;
}
};
...
for (int i = 0; i < 3; ++i)
{
iter = find_if(routes.begin(), routes.end(), randomElementByWeight());
}