生成不重复随机数的小程序
图片浏览器里自动播放图片幻灯片都会有随机播放的选项,并且可以选择不重复播放。之前在TICPP书里看到过一个生成唯一随机数的程序,利用bitset实现。自己就写了一段代码,发现bitset需要用模板参数指定位数,不太方便,不能用变量指定位数。就改用下面的deque
#include <time.h>
#include <stdlib.h>
#include <deque>
#include <algorithm>
// [0,size)的随机序号
class UniqueRadomNumber
{
int size;
int curCount;
std::deque<bool> record;
public:
UniqueRadomNumber(int maxNum);
~UniqueRadomNumber(void) {} ;
int operator()(void);
};
UniqueRadomNumber::UniqueRadomNumber( int maxNum )
{
size = maxNum;
curCount = 0;
record.resize(size,false);
srand(time(0));
}
int UniqueRadomNumber::operator()( void )
{
if (curCount == size)
{
curCount = 0;
std::fill(record.begin(),record.end(),false);
}
int cur = rand()%size;
while (record[cur]){
cur = rand()%size;
}
record[cur] = true;
curCount++;
return cur;
}需要改进的地方:
处理容器的效率问题。
