生成不重复随机数的小程序

图片浏览器里自动播放图片幻灯片都会有随机播放的选项,并且可以选择不重复播放。之前在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;
}

需要改进的地方:
处理容器的效率问题。