c++11 标准模板(STL)(std::bitset)(七)

news2024/11/24 19:31:09
定义于头文件 <bitset>

template< std::size_t N >
class bitset;

类模板 bitset 表示一个 N 位的固定大小序列。可以用标准逻辑运算符操作位集,并将它与字符串和整数相互转换。

bitset 满足可复制构造 (CopyConstructible) 及可复制赋值 (CopyAssignable) 的要求。

模板形参

N-要为 bitset 分配存储的位数

成员类型

reference

表示到一个位的引用的代理类
(类)

成员函数

比较其内容

operator==,!=(std::bitset)

bool operator==( const bitset<N>& rhs ) const;

(1)

bool operator!=( const bitset<N>& rhs ) const;

(2)

 1) 若 *thisrhs 中的所有位相等则返回 true 。

2) 若 *thisrhs 中的任何位不相等则返回 true 。

参数

rhs-要比较的 bitset

返回值

1) 若 *this 中每位都等于 rhs 中对应位的值则为 true ,否则为 false

2) 若 !(*this == rhs) 则为 true ,否则为 false

容量

返回位集能保有的位数大小

std::bitset<N>::size

std::size_t size() const;

(C++11 前)

constexpr std::size_t size() const noexcept;

(C++11 起)

返回 bitset 所能保有的位数。

参数

(无)

返回值

bitset 所能保有的位数,即模板形参 N

 

转换

返回数据的字符串表示

std::bitset<N>::to_string
template<

    class CharT,
    class Traits,
    class Alloc

> std::basic_string<CharT,Traits,Allocator> to_string() const;
(C++11 前)
template<

    class CharT = char,
    class Traits = std::char_traits<CharT>,
    class Allocator = std::allocator<CharT>
> std::basic_string<CharT,Traits,Allocator>

    to_string(CharT zero = CharT('0'), CharT one = CharT('1')) const;
(C++11 起)

 转换 bitset 的内容为 string 。用 zero 表示拥有值 false 的位,以 one 表示拥有值 true 的位。

产生的字符串含 N 个字符,其首字符对应最末(第 N-1th )位而其尾字符对应首位。

参数

zero-用于表示 false 的字符
one-用于表示 true 的字符

返回值

转换出的字符串

异常

可能从 std::string 构造函数抛出 std::bad_alloc 。

返回数据的 unsigned long 整数表示

std::bitset<N>::to_ulong

unsigned long to_ulong() const

转换 bitset 的内容为 unsigned long 整数。

bitset 的首位对应数的最低位,而尾位对应最高位。

参数

(无)

返回值

转换出的整数

异常

若值不能以 unsigned long 表示则抛出 std::overflow_error 。

 

返回数据的 unsigned long long 整数表示

std::bitset<N>::to_ullong

unsigned long long to_ullong() const

(C++11 起)

转换 bitset 的内容为 unsigned long long 整数。

bitset 的首位对应数的最低位,而尾位对应最高位。

参数

(无)

返回值

转换出的整数

异常

若值不能以 unsigned long long 表示则为 std::overflow_error 。

 

辅助类

std::bitset 的散列支持

std::hash (std::bitset)

template<size_t N> struct hash<bitset<N>>;

(C++11 起)

 std::hash 对 std::bitset<N> 的模板特化允许用户获得 std::bitset<N> 类型的对象的哈希。

调用示例

#include <iostream>
#include <bitset>
#include <string>
#include <sstream>
#include <limits>

template<size_t _Nb>
void printBitset(const std::string &name, const std::bitset<_Nb> &bitset)
{
    std::cout << name << ":  ";
    for (size_t index = 0; index < bitset.size(); index++)
    {
        std::cout << bitset[index] << " ";
    }
    std::cout << std::endl;
}

int main()
{
    std::cout << std::boolalpha;

    //转换 bitset 的内容为 string 。用 zero 表示拥有值 false 的位,以 one 表示拥有值 true 的位。
    //产生的字符串含 N 个字符,其首字符对应最末(第 N-1th )位而其尾字符对应首位。
    std::bitset<8> bitset1(123);
    std::cout << "bitset1.to_string():          " << bitset1.to_string() << std::endl;
    std::cout << "bitset1.to_string('*'):       " << bitset1.to_string('*') << std::endl;
    std::cout << "bitset1.to_string('X','Y'):   " << bitset1.to_string('X', 'Y') << std::endl;
    std::cout << std::endl;


    //转换 bitset 的内容为 unsigned long 整数。
    //bitset 的首位对应数的最低位,而尾位对应最高位。
    for (unsigned long i = 0; i < 8; ++i)
    {
        std::bitset<5> b(i);
        std::bitset<5> b_inverted = ~b;
        std::cout << i << '\t';
        std::cout << b << '\t';
        std::cout << b_inverted << '\t';
        std::cout << b_inverted.to_ulong() << '\n';
    }
    std::cout << std::endl;


    //转换 bitset 的内容为 unsigned long long 整数。
    //bitset 的首位对应数的最低位,而尾位对应最高位。
    std::bitset<std::numeric_limits<unsigned long long>::digits> bitset3(
        0x123456789abcdef0LL
    );
    std::cout << bitset3 << "  " << std::hex << bitset3.to_ullong() << std::endl;
    bitset3.flip();
    std::cout << bitset3 << "  " << bitset3.to_ullong() << std::endl;
    std::cout << std::endl;


    //1) 若 *this 与 rhs 中的所有位相等则返回 true 。
    std::bitset<8> bitset5("10101010");
    std::bitset<8> bitset6(bitset5);
    std::bitset<8> bitset7("01010101");
    std::cout << "bitset5:              " << bitset5 << std::endl;
    std::cout << "bitset6:              " << bitset6 << std::endl;
    std::cout << "bitset7:              " << bitset7 << std::endl;
    //1) 若 *this 与 rhs 中的所有位相等则返回 true 。
    //2) 若 *this 与 rhs 中的任何位不相等则返回 true 。
    std::cout << "bitset5 == bitset6    " << (bitset5 == bitset6) << std::endl;
    std::cout << "bitset5 != bitset6    " << (bitset5 != bitset6) << std::endl;
    std::cout << "bitset5 == bitset7    " << (bitset5 == bitset7) << std::endl;
    std::cout << "bitset5 != bitset7    " << (bitset5 != bitset7) << std::endl;
    std::cout << std::endl;

    //返回 bitset 所能保有的位数。
    std::cout << "bitset5.size():       " << bitset5.size() << std::endl;
    std::cout << "bitset6.size():       " << bitset6.size() << std::endl;
    std::cout << "bitset7.size():       " << bitset7.size() << std::endl;
    std::cout << std::endl;

    //std::hash 对 std::bitset<N> 的模板特化允许用户获得 std::bitset<N> 类型的对象的哈希。
    std::hash<std::bitset<8>> hash_fn;
    size_t hash1 = hash_fn(bitset5);
    size_t hash2 = hash_fn(bitset6);
    size_t hash3 = hash_fn(bitset7);
    std::cout << "std::hash<bitset5>:   " << hash1 << std::endl;
    std::cout << "std::hash<bitset6>:   " << hash2 << std::endl;
    std::cout << "std::hash<bitset7>:   " << hash3 << std::endl;

    return 0;
}

输出

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode_二叉树_BFS_中等_199.二叉树的右视图

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1&#xff1a; 输入: [1,2,3,null,5,null,4] 输出: [1,…

测试计划包括哪些主要步骤和信息?

测试计划包括哪些主要步骤和信息? 在软件测试的过程中&#xff0c;编写一个完整的测试计划是非常重要的一步。测试计划记录了测试的具体内容、步骤、目标及其实现计划、测试环境和相关资源等信息。下面将为您详细介绍测试计划包括哪些主要步骤和信息。 1. 测试概述 测试概述部…

centos7 部署 Mysql 5.7

centos7 部署 Mysql 5.7 一、安装2.1 环境准备2.2 开始安装2.2.1 安装源2.2.2 版本选择2.2.3 安装 MySQL 二、MySQL 设置2.1 密码设置2.2 远程访问账户设置2.3 设置开机启动 一、安装 2.1 环境准备 1、查看系统自带或之前安装的 mariadb。 rpm -qa | grep mariadb2、卸载它们…

Nginx+Tomcat实现负载均衡、动静分离集群部署

NginxTomcat实现负载均衡、动静分离集群部署 一、Tomcat多实例部署1、安装好JDK2、安装tomcat3、配置tomcat环境变量4、修改tomcat2中的server.xml文件&#xff0c;要求各tomcat实例配置不能有重复的端口号5、修改各tomcat实例中的startup.sh和shutdown.sh文件&#xff0c;添加…

ArrayList 万字长文解析:使用、优化、源码分析

文章目录 ArrayList 万字长文解析&#xff1a;使用、优化、源码分析前言ArrayList 简介ArrayList 的基本使用方法ArrayList 性能优化ArrayList 的源码分析内部结构构造方法解析扩容机制System.arraycop与 Arrays.copyof 实现方式 与 使用场景迭代器 JDK 8版本 ArrayList bug 示…

如何安装pycharm的包

PyCharm是JetBrains公司推出的一款Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;可以提供高效的Python代码编写、调试和测试。以下是一些PyCharm的主要功能&#xff1a; 代码智能提示和自动补全功能&#xff1b;支持调试和测试Python代码&#xff1b;完整的Pyth…

如何正确地处理职场中的失误

如何正确地处理职场中的失误 在职场上&#xff0c;我们都会遇到各种各样的问题和挑战。面对这些问题时&#xff0c;我们有时难免会犯错。但正如一句古老的谚语所说&#xff1a;“失败是成功之母。”我们应该从失误中吸取教训&#xff0c;不断成长。本文将探讨如何正确地处理职…

【云原生-K8s-2】kubeadm搭建k8s高可用集群(三主两从一VIP)完整教程

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录 Kubernetes高可用集群部署准备工作&a…

chatgpt赋能python:Python就业前景展望:一门热门语言的发展趋势分析

Python就业前景展望&#xff1a;一门热门语言的发展趋势分析 Python是一种高级、解释型编程语言&#xff0c;已经成为最受欢迎的语言之一。Python的良好生态系统、易用性和强大的库和框架支持使得许多公司和组织使用Python来构建各种类型的应用程序、工具和系统。Python广泛应…

实施了这么多WMS系统之后,总结10点感悟分享

WMS系统是现代物流行业中不可或缺的一环&#xff0c;通过WMS系统的实施&#xff0c;企业可以更好地管理内部仓储、运输和配送工作&#xff0c;从而提高工作效率和减少成本。在实施WMS系统之后&#xff0c;我们对于这一过程有了更深入的了解和感悟。 1.要注意数据准确性&#xf…

ESP8266 SDK开发阶段无线WIFI本地烧录升级程序 -- FOTA

【本文发布于https://blog.csdn.net/Stack_/article/details/130448713&#xff0c;未经允许不得转载&#xff0c;转载须注明出处】 前言 因为正在DIY一个WiFi计量插座&#xff0c;采用非隔离的方案&#xff0c;烧录时要拔掉220V插头&#xff0c;测试时要拔掉USB线&#xff0c;…

webpack指定输出资源的路径和名称

如图&#xff0c;在前面的章节我们打包后的文件默认都输出到了dist目录下&#xff0c;无论是图片、还是js都在同一级别目录&#xff0c;这里目前处理的资源比较少&#xff0c;如果资源一多&#xff0c;所有的资源都在同一级目录&#xff0c;看起来很费劲。 那么这节就介绍一下…

【LeetCode】74. 搜索二维矩阵

74. 搜索二维矩阵&#xff08;中等&#xff09; 方法一&#xff1a;二分查找 思路 总体思路 由于二维矩阵固定列的「从上到下」或者固定行的「从左到右」都是升序的 因此我们可以使用两次二分来定位到目标位置。 第一次二分&#xff1a; 从第 0 列中的「所有行」开始找&#x…

Threejs,InstancedMesh变换操作

Threejs,InstancedMesh 在项目中加载一个道路的模型树,结果加载出来是水平的 期望是: 仔细分析: 打印模型元素,模型是两个交叉的InstancedMesh ,每个InstancedMesh 里面有566重复的mesh,形成566棵树。那么现在的期望就变成这两个交叉的InstancedMesh 各自旋转下角度 c…

高考作文题押中了?其实是一种趋势:探索、好奇、故事、技术、时间…

探索、好奇、故事、技术、时间 不知不觉&#xff0c;距离高考已经过去了23年……今年的高考题&#xff0c;关键词非常有时代感&#xff0c;不禁让人联想背后的趋势是什么&#xff1f; 趋势是无法抵挡的浪潮&#xff0c;一旦你没有跟上&#xff0c;这个时代的叙事就没有你的一份…

卡尔曼滤波与组合导航原理(二)卡尔曼滤波方程的推导

文章目录 三、卡尔曼滤波1、随机系统状态空间模型2、状态预测3、状态量测4、增益矩阵K与状态估计5、Kalman滤波公式汇总6、Kalman滤波流程图1.划分为左右两部分&#xff08;一阶矩和二阶矩&#xff09;2.划分为上下两部分&#xff08;时间更新、量测更新&#xff09; 7、Kalman…

关于如何清理过多索引的思考

今天同事提了一个问题&#xff0c;还是值得思考的&#xff0c;某个作为数据分发的MySQL库&#xff0c;有时候需要在不同的环境中同步创建数据库&#xff0c;但受工具限制&#xff0c;只能做数据同步&#xff0c;索引这些对象则需要单独创建&#xff0c;该数据库的索引太多&…

在 Transformers 中使用约束波束搜索引导文本生成

引言 本文假设读者已经熟悉文本生成领域波束搜索相关的背景知识&#xff0c;具体可参见博文 如何生成文本: 通过 Transformers 用不同的解码方法生成文本。 与普通的波束搜索不同&#xff0c;约束 波束搜索允许我们控制所生成的文本。这很有用&#xff0c;因为有时我们确切地知…

学习笔记之MySQL索引

1、引言 索引是数据库用来提高性能最常用的工具&#xff0c;一般索引本身也很大&#xff0c;不可能全部存于内存中&#xff0c;因此所以往往以文件形式存于磁盘上。 左表是数据表&#xff0c;共两列七条数据。为了加快Col2的查找&#xff0c;可以维护一个右表所示的二叉查找树…