新闻中心
C++ bitset位集合用法_C++二进制操作与状态压缩技巧

在C++中,bitset 是一个非常实用的模板类,用于高效地操作固定长度的二进制位序列。它定义在 bits/stdc++.h 或
bitset 基本定义与初始化
bitset 的模板参数是编译期确定的常量,表示位数:
- bitset bs1; // 默认初始化为全0
- bitset bs2(255); // 用整数初始化(十进制)
- bitset bs3("11001010"); // 用字符串初始化
- bitset bs4 = bitset(0xFF); // 十六进制也支持
注意:字符串初始化时只能包含 '0' 和 '1',否则会抛出异常。超出位宽的部分会被截断,不足则高位补0。
常用成员函数与操作符
bitset 支持多种便捷的操作方法,让位操作更清晰:
- count():返回1的个数(即汉明权重)
- size():返回总位数
- test(i):检查第 i 位是否为1(越界会抛异常)
- set(i):将第 i 位置为1;set(i, 0) 可清零
- reset(i):将第 i 位置为0;reset() 全部清零
- flip():翻转所有位;flip(i) 翻转第 i 位
- any():是否有任意一位为1
- none():是否全为0
- to_ulong() / to_ullong():转换为 unsigned long / unsigned long long
- [] 操作符:可像数组一样访问某一位(只读或赋值)
例如:
bitset b("1010");cout cout b.flip(0); // 翻转最低位
cout
二进制操作与位运算支持
bitset 支持常见的按位运算,语法清晰:
Motiff妙多
Motiff妙多是一款AI驱动的界面设计工具,定位为“AI时代设计工具”
334
查看详情
- ~bs:取反
- bs1 & bs2:按位与
- bs1 | bs2:按位或
- bs1 ^ bs2:按位异或
- bs 、bs >> n:左右移位
这些运算要求两个 bitset 的大小相同,否则编译报错。结果仍是一个 bitset,便于链式操作。
状态压缩中的实际应用
在动态规划或搜索问题中,常使用状态压缩来表示集合状态,比如“哪些物品已被选”或“哪些节点已访问”。用 int 或 long long 配合位运算虽然高效,但不易调试。bitset 能提升代码可读性。
例如:n 个城市旅行商问题(TSP)简化版,可用 bitset 表示已访问城市集合:
const int N = 20;bitset
visited.set(0); // 访问城市0
if (!visited.test(3)) { // 如果未访问城市3
visited.set(3); // 标记访问
}
int cnt = visited.count(); // 已访问数量
虽然 bitset 不支
持运行时动态改变大小,但对大多数状态压缩场景来说,最大状态数是已知的,因此完全可以胜任。
基本上就这些。bitset 让位操作更安全、直观,尤其适合算法竞赛和状态管理。虽然性能略低于直接位运算,但在可接受范围内,且大幅提高开发效率和代码清晰度。合理使用,能让你的 C++ 位操作既高效又优雅。
以上就是C++ bitset位集合用法_C++二进制操作与状态压缩技巧的详细内容,更多请关注其它相关文章!
# 易读
# 华容手机网站建设
# 推广网站赚佣金
# 鄂州网站建设方案公示网
# 嵊州旅游网站建设
# 烟台seo优化技术
# 网站怎么推广挣钱
# 企业免费b2b推广网站
# 照明网站推广案例
# 营销网站建设企业名录
# 玉溪市seo
# c++
# 清零
# 头文件
# 配置文件
# 解决方法
# 链式
# 怎么做
# 重写
# 整型
# 有什么
# 代码可读性
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
在Socket.IO连接中实现Access Token自动更新与动态重连
uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页
Golang如何实现简单的Web表单_Golang表单提交与验证处理方法
Win11网速慢怎么解决 Win11网络设置优化解除限速
AO3网页版最新入口合集 Archive of Our Own在线访问指南
Go语言中JSON数据解析与字段访问教程
mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析
押井守高度称赞《辐射4》:玩了八年都停不下来!
双系统安装时,如何设置默认启动系统? msconfig命令了解一下!
excel如何生成目录 excel一键生成工作表目录超链接
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析
响应式容器内容自动缩放与宽高比维持教程
Go RPC HTTP服务正确实现与常见陷阱解析
浏览器打开即用 美图秀秀网页版入口
消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
QQ网页版官方账号入口 QQ网页版网页版登录指南
荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】
微博网页版直接访问 微博网页版账号管理快速入口
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
高德地图公交到站提醒失败如何解决 高德提醒权限设置
怎么在mac上运行html代码_mac运行html代码方法【指南】
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】
CSS实现侧边栏导航项全宽圆角悬停背景效果
python3时间如何用calendar输出?
微信客户端如何收红包_微信客户端接收红包使用教程
Python中高效访问嵌套字典与列表中的键值对
优化Log4j2控制台输出性能:解决异步日志瓶颈
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能
印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】
曝R星经典之作开发图 设计简陋但信息密集!
qq音乐在线播放入口_qq音乐电脑版登录链接
Linux如何构建多环境配置管理_Linux多环境配置方案
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
解决Bootstrap卡片顶部边距导致背景图下移的问题
Python类型检查:优化关联可选属性的Mypy推断策略
在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
蛙漫官网漫画入口地址_蛙漫在线畅读无广告弹窗
c++如何使用chrono库处理时间_c++标准库时间与日期操作
痛风发作了怎么办? 快速止痛和后期饮食调理
C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略
如何将HTML表格多行数据保存到Google Sheets
写好的html代码怎么运行出来_运行写好的html代码方法【教程】
解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常
铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧
AO3最新官网入口公告_2025AO3镜像站实时查询方法


2025-11-27
浏览次数:次
返回列表