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

图片浏览器里自动播放图片幻灯片都会有随机播放的选项,并且可以选择不重复播放。之前在TICPP书里看到过一个生成唯一随机数的程序,利用bitset实现。 自己就写了一段代码,发现bitset需要用模板参数指定位数,不太方便,不能用变量指定位数。就改用下面的 deque<bool> 来保存状态:

#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;
}

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