IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【C++】基于BitMap产生不重复的10位随机数字串 -> 正文阅读

[数据结构与算法]【C++】基于BitMap产生不重复的10位随机数字串

#include <QCoreApplication>
#include <vector>
#include <chrono>
#include <iostream>

// 位图的每一位的0,1标志这个数存在或不存在的状态
class BitMap
{
public:
    BitMap(size_t nSize = 1024)
    {
        vecArray.resize(nSize/32+1);    // 加1是为了防止除不尽的时候外加一个size_t来保存位
    }

    // 将这个数的状态位置为1
    void set(const size_t &nValue)
    {
        size_t index = nValue >> 5;     // 除以32,取nValue在数组中的索引
        size_t bit = nValue % 32;       // 判断在32位中的哪一位
        vecArray[index] |= (1<<bit);
    }

    // 将这个数的状态位置为0
    void reset(const size_t &nValue)
    {
        size_t nIndex = nValue >> 5;
        size_t nBit = nValue % 32;
        vecArray[nIndex] &= (~(1<<nBit));   // ~按位取反
    }

    // 这个数的状态位是否为1
    bool test(const size_t &nValue)
    {
        size_t nIndex = nValue >> 5;
        size_t nBit = nValue % 32;
        return (vecArray[nIndex] & (1<<nBit));
    }

private:
    std::vector<size_t> vecArray;
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // obtain a seed from the system clock:
    unsigned int seed = std::chrono::system_clock::now().time_since_epoch().count();
    std::mt19937_64 rng(seed);
    std::uniform_int_distribution<uint64_t> distribution(0, size_t(-1));   // 产生0-4294967295的随机整数

    BitMap bm(size_t(-1));
    std::cout << "Num: " << size_t(-1) << std::endl;
    for(size_t i=0; i<10000; )       // 产生10000个
    {
        std::string sIdTmp = std::string(10,'0') + std::to_string(distribution(rng));   // 产生的随机数不够10位,左边补0
        std::string sId = sIdTmp.substr(sIdTmp.length()-10);        // 取右边10位
        unsigned long nId = std::stoul(sId);

        if(false == bm.test(nId))
        {
            std::cout << "Id: " << sId << std::endl;
            bm.set(nId);
            ++i;
        }
    }

    return a.exec();
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:24:47  更:2022-04-15 00:26:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:19:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码