C++ 因项目需求,需要将0~2的32次方这个区间的数字保存到内存当中(内存大小为4G),并且可以实现对任意一个数字的增删。(先叙述设计思路,再写岀代码)
问题: C++ 因项目需求,需要将0~2的32次方这个区间的数字保存到内存当中(内存大小为4G),并且可以实现对任意一个数字的增删。(先叙述设计思路,再写岀代码)
解答
- 设计思路
- 代码实现
- 说明
为了在有限的内存(4GB)中存储和操作 0 到 2^32-1 之间的所有数字,我们需要考虑数据结构和存储策略。由于32位整数的范围很大(4,294,967,296 个可能的数字),我们需要一个高效的方式来存储和操作这些数字。在这种情况下,位图(bitmap)是一个合适的选择。
设计思路
-
位图(Bitmap):
- 使用位图来表示数字的存在与否,每一个位(bit)对应一个数字。
- 位图的大小需要 2^32 bits(约 512MB),因为每个数字占用1 bit。
-
内存分配:
- 4GB内存足够容纳整个位图。
- 位图可以使用
std::vector<uint8_t>来表示,每个uint8_t包含8个bit。
-
增删操作:
- 增加数字时,将对应位置的bit设置为1。
- 删除数字时,将对应位置的bit设置为0。
-
辅助函数:
- 设置位函数:设置特定位置的bit为1。
- 清除位函数:设置特定位置的bit为0。
- 查询位函数:检查特定位置的bit是0还是1。
代码实现
#include <iostream>
#include <vector>
#include <cstdint>class Bitmap {
public:Bitmap(uint64_t size) {bitmap.resize((size + 7) / 8); // 每8个bit为1个byte}// 添加数字void add(uint32_t num) {bitmap[num / 8] |= (1 << (num % 8));}// 删除数字void remove(uint32_t num) {bitmap[num / 8] &= ~(1 << (num % 8));}// 检查数字是否存在bool contains(uint32_t num) const {return bitmap[num / 8] & (1 << (num % 8));}private:std::vector<uint8_t> bitmap;
};int main()
{Bitmap bitmap(1ULL << 32); // 创建一个包含 2^32 位的位图// 测试添加和删除数字uint32_t num = 123456789;bitmap.add(num);std::cout << "Contains " << num << "? " << (bitmap.contains(num) ? "Yes" : "No") << std::endl;bitmap.remove(num);std::cout << "Contains " << num << "? " << (bitmap.contains(num) ? "Yes" : "No") << std::endl;return 0;
}
说明
-
Bitmap类:
bitmap使用std::vector<uint8_t>存储位图数据。add方法将对应的bit设置为1。remove方法将对应的bit设置为0。contains方法检查对应的bit是否为1。
-
main函数:
- 创建一个
Bitmap对象,大小为2^32位。 - 测试添加和删除数字操作。
- 创建一个
这种方法利用位图的高效性和位操作的快速性,在有限的内存中实现对大量数据的存储和操作。
相关文章:
C++ 因项目需求,需要将0~2的32次方这个区间的数字保存到内存当中(内存大小为4G),并且可以实现对任意一个数字的增删。(先叙述设计思路,再写岀代码)
问题: C 因项目需求,需要将0~2的32次方这个区间的数字保存到内存当中(内存大小为4G),并且可以实现对任意一个数字的增删。(先叙述设计思路,再写岀代码) 解答 设计思路代码实现说明 为了在有限的内存(4GB)中存储和操作 …...
Linux 下的性能监控与分析技巧
在日常的服务器管理和问题诊断过程中,Linux 命令行工具提供了强大的支持。本文通过几个常用的示例,介绍如何快速定位问题、监控服务器性能。 无论你是编程新手还是有一定经验的开发者,理解和掌握这些命令,都将在你的工作中大放异…...
不可复制网站上的文字——2种方法
禁用javascript或Console控制台代码 (1)F12键——设置——勾选禁用javascript (2)Console控制台敲如下代码: var allowPaste function(e){ e.stopImmediatePropagation(); return true; }; document.addEventListe…...
Ubuntu 22.04上编译安装c++ spdlog library
Very fast, header-only/compiled, C logging library. 请以root身份或sudo执行。 1. 安装必需的依赖项: sudo apt-get update sudo apt-get install git g cmake 2. 克隆 spdlog 仓库: cd /opt git clone https://github.com/gabime/spdlog.git …...
ESP32代码开发入门
ESP-IDF ESP-ADF开发 开发概要 编译环境及SDK搭建 整个开发流程是:下载ESP-IDF, ESP-ADF(按需下载),并安装, 编写hello world工程,编译并烧录到主板验证 可参照ESP32 esp-idf esp-adf环境安装及.a库创建与编译api大部分可以用glibc的接口 做了封装,时间time(NULL), 创建线程p…...
“势”是“态”的偶然性减少
“态势感知”中的“势”指的是一种趋势或倾向性,而“态”则表示状态或局势。这个术语常用于描述在一段时间内系统或事件显示出来的方向性变化或发展趋势。因此,可以将“态势”理解为系统或事件状态变化的趋势,这种变化通常反映出偶然性减少的…...
人脑计算机技术与Neuroplatform:未来计算的革命性进展
引言 想象一下,你在某个清晨醒来,准备开始一天的工作,而实际上你的大脑正作为一台生物计算机的核心,处理着大量复杂的信息。这并非科幻电影的情节,而是人脑计算机技术即将带来的现实。本文将深入探讨FinalSpark公司的…...
新版周易测算系统源码 去授权完美运行
已经去掉授权可以完美运行 更新了三个模板市面上都是几千几千的卖 更新了三套首页新ui 自己后台切换就行 源码大小:338M 源码下载:https://download.csdn.net/download/m0_66047725/89447857 更多资源下载:关注我....
【PYTHON】力扣刷题笔记 -- 0053. 最大子数组和【中等】
题目描述:给你一个整数数组 array: nums ,请你找出一个具有最大和的连续子数组 sub-array,返回其最大和 子数组(最少包含一个元素): 是数组中的一个连续部分 示例 1: 输入:nums [-2,1,-3,4,-1…...
Linux启动elasticsearch,提示权限不够
Linux启动elasticsearch,提示权限不够,如下图所示: 解决办法: 设置文件所有者,即使用户由权限访问文件 sudo chown -R 用户名[:新组] ./elasticsearch-8.10.4 //切换到elasticsearch-8.10.4目录同级 chown详细格式…...
css 布局出现无法去除的空白
案件介绍:在没有设置任何的css样式的情况下 文字顶部出现无法去除的空白 源代码 <div click"onClick" ><div class"tableTextButton--container"></div><Icon v-if"loading || thisLoading" type"ios-lo…...
使用SpringBoot整合filter
SpringBoot整合filter,和整合servlet类似,也有两种玩儿法 1、创建一个SpringBoot工程,在工程中创建一个filter过滤器,然后用注解WebFilter配置拦截的映射 2、启动类还是使用ServletComponentScan注解来扫描拦截器注解WebFilter 另…...
Python酷库之旅-第三方库openpyxl(15)
目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式…...
葡萄串目标检测YoloV8——从Pytorch模型训练到C++部署
文章目录 软硬件准备数据准备数据处理脚本模型训练模型部署数据分享软硬件准备 训练端 PytorchultralyticsNvidia 3080Ti部署端 fastdeployonnxruntime数据准备 用labelimg进行数据标注 数据处理脚本 xml2yolo import os import glob import xml.etree.ElementTree as ETxm…...
OpenAI推出自我改进AI- CriticGPT
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
springboot系列七: Lombok注解,Spring Initializr,yaml语法
老韩学生 LombokLombok介绍Lombok常用注解Lombok应用实例代码实现idea安装lombok插件 Spring InitializrSpring Initializr介绍Spring Initializr使用演示需求说明方式1: IDEA创建方式2: start.spring.io创建 注意事项和说明 yaml语法yaml介绍使用文档yaml基本语法数据类型字面…...
专访ATFX首席战略官Drew Niv:以科技创新引领企业高速发展
在金融科技创新的浪潮中,人才是推动企业高速发展的核心驱动力,优质服务是引领企业急速前行的灯塔。作为差价合约领域的知名品牌,ATFX高度重视人才引进工作,秉持“聚天下英才而用之”的理念,在全球范围内广揽科技精英&a…...
关于FPGA对 DDR4 (MT40A256M16)的读写控制 4
关于FPGA对 DDR4 (MT40A256M16)的读写控制 4 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 关于FPGA对 DDR4 (MT40A256M16)的读写控制 4一、引言二、DDR4 SDRAM设备中模式寄存器重要的模式寄存…...
android——Livedata、StateFlow、ShareFlow和Channel的介绍和使用
目录 一、LiveData介绍 二、StateFlow介绍 三、ShareFlow介绍 四、Channel介绍 小结 一、LiveData介绍 LiveData是一种在Android开发中用于观察数据变化的组件。它可以被观察者注册并在数据变化时通知观察者,从而实现数据的实时更新。LiveData具有生命周期感知能力&…...
Debezium 同步 MySQL 实时数据并解决数据重复消费问题
我们使用 Debezium 实时同步一个 MySQL 的数据到另一个 MySQL,代码网上基本都有,都是在引入 debezium-api,debezium-embedded 后写 Java 代码,做好了基本配置后启动程序,Debezium 会自动读取 MySQL 的实时 binlog&…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
