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

定义于头文件 <bitset>

template< std::size_t N >
class bitset;

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

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

模板形参

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


成员函数

构造 bitset

std::bitset<N>::bitset

bitset();

(1)

(C++11 前)

constexpr bitset() noexcept;

(C++11 起)

bitset( unsigned long val );

(2)(C++11 前)

constexpr bitset( unsigned long long val ) noexcept;

(C++11 起)
template< class CharT, class Traits, class Alloc >

explicit bitset( const std::basic_string<CharT,Traits,Alloc>& str,
                 typename std::basic_string<CharT,Traits,Alloc>::size_type
                     pos = 0,
                 typename std::basic_string<CharT,Traits,Alloc>::size_type

                     n = std::basic_string<CharT,Traits,Alloc>::npos);
(3)(C++11 前)
template< class CharT, class Traits, class Alloc >

explicit bitset( const std::basic_string<CharT,Traits,Alloc>& str,
                 typename std::basic_string<CharT,Traits,Alloc>::size_type
                     pos = 0,
                 typename std::basic_string<CharT,Traits,Alloc>::size_type
                     n = std::basic_string<CharT,Traits,Alloc>::npos,
                 CharT zero = CharT('0'),

                 CharT one = CharT('1'));
(C++11 起)
template< class CharT >

explicit bitset( const CharT* str,
                 typename std::basic_string<CharT>::size_type
                     n = std::basic_string<CharT>::npos,
                 CharT zero = CharT('0'),

                 CharT one = CharT('1'));
(4)(C++11 起)

 

从数个数据源之一构造新的 bitset

1) 默认构造函数。构造所有位设为零的 bitset

2) 构造 bitset ,初始化其首(最右、最低) M 位位置为对应 val 的位值,其中 Munsigned long long 的位数和正在构造的 bitset 中的位数 N 的较小者。若 M 小于 N ( bitset 长于 32 (C++11 前)64 (C++11 起) 位,对于典型的 unsigned long (C++11 起)long 实现),则剩余位位置被初始化为零。

3) 用 std::basic_string str 中的字符构造 bitset 。能提供可选的起始位置 pos 和长度 n ,以及指代设置( one )和不设置( zero )位的替代值的字符。用 Traits::eq() 比较字符值。

初始化字符串的有效长度是 min(n, str.size() - pos) 。

pos > str.size() ,则构造函数抛出 std::out_of_range 。若 str 中检验到的任何字符非 zeroone ,则抛出 std::invalid_argument 。

4) 同 (3) ,但用 CharT* 代替 std::basic_string 。等价于 bitset(n == basic_string<CharT>::npos ? basic_string<CharT>(str) : basic_string<CharT>(str, n), 0, n, zero, one) 。

参数

val-用于初始化 bitset 的数字
str-用于初始化 bitset 的字符串
pos-str 中的起始偏移
n-使用来自 str 的字符数
one-设置位于 str 中的替用字符
zero-不设置位于 str 中的替用字符

异常

3) 若 pos > str.size() 则为 std::out_of_range ,若任何字符非一或零则为 std::invalid_argument

4) std::invalid_argument ,若任何字符非一或零

调用示例

#include <iostream>
#include <bitset>
#include <string>

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 : 1) 默认构造函数。构造所有位设为零的 bitset 。
    std::bitset<6> bitset1;
    std::cout << "bitset1:  " << bitset1 << std::endl;
    printBitset("bitset1", bitset1);
    std::cout << std::endl;

    // 2) 构造 bitset ,初始化其首(最右、最低) M 位位置为对应 val 的位值,
    //其中 M 是 unsigned long long 的位数和正在构造的 bitset 中的位数 N 的较小者。
    //若 M 小于 N ( bitset 长于 32 (C++11 前)64 (C++11 起) 位,
    //对于典型的 unsigned long (C++11 起)long 实现),则剩余位位置被初始化为零。
    std::bitset<6> bitset2(100);
    std::cout << "bitset2:  " << bitset2 << std::endl;
    printBitset("bitset2", bitset2);
    std::cout << std::endl;

    //3) 用 std::basic_string str 中的字符构造 bitset 。
    //能提供可选的起始位置 pos 和长度 n ,以及指代设置( one )和不设置( zero )位的替代值的字符。
    //用 Traits::eq() 比较字符值。
    //初始化字符串的有效长度是 min(n, str.size() - pos) 。
    //若 pos > str.size() ,则构造函数抛出 std::out_of_range 。
    //若 str 中检验到的任何字符非 zero 或 one ,则抛出 std::invalid_argument 。
    std::string bit_string = "110010";
    std::bitset<8> bitset3(bit_string);       // [0,0,1,1,0,0,1,0]
    std::cout << "bitset3:  " << bitset3 << std::endl;
    printBitset("bitset3", bitset3);

    std::bitset<8> bitset4(bit_string, 2);
    std::cout << "bitset4:  " << bitset4 << std::endl;
    printBitset("bitset4", bitset4);

    std::bitset<8> bitset5(bit_string, 1, 5);
    std::cout << "bitset5:  " << bitset5 << std::endl;
    printBitset("bitset5", bitset5);
    std::cout << std::endl;

    //4) 同 (3) ,但用 CharT* 代替 std::basic_string 。
    //等价于 bitset(n == basic_string<CharT>::npos ?
    //basic_string<CharT>(str) : basic_string<CharT>(str, n), 0, n, zero, one) 。
    std::string alpha_bit_string = "aBaaBBaB";// [0,1,0,0,1,1,0,1]
    std::bitset<8> bitset6(alpha_bit_string, 0, alpha_bit_string.size(), 'a', 'B');
    std::cout << "bitset6:  " << bitset6 << std::endl;
    printBitset("bitset6", bitset6);
    std::cout << std::endl;

    std::bitset<8> bitset7("XXXXYYYY", 8, 'X', 'Y'); // [0,0,0,0,1,1,1,1]
    std::cout << "bitset7:  " << bitset7 << std::endl;
    printBitset("bitset7", bitset7);
    std::cout << std::endl;

    return 0;
}

输出

 


http://www.niftyadmin.cn/n/390534.html

相关文章

scratch舞蹈演出 中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析2023年5月

目录 scratch舞蹈演出 一、题目要求 1、准备工作 2、功能实现 二、案例分析

《计算机组成原理》唐朔飞 第5章 输入输出系统 - 学习笔记

写在前面的话&#xff1a;此系列文章为笔者学习计算机组成原理时的个人笔记&#xff0c;分享出来与大家学习交流。使用教材为唐朔飞第3版&#xff0c;笔记目录大体与教材相同。 网课 计算机组成原理&#xff08;哈工大刘宏伟&#xff09;135讲&#xff08;全&#xff09;高清_…

人工智能深度学习100种网络模型,精心整理,全网最全,PyTorch框架逐一搭建

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能深度学习100种网络模型&#xff0c;这些模型可以用PyTorch深度学习框架搭建。模型按照个人学习顺序进行排序&#xff1a; 深度学习模型 ANN (Artificial Neural Network) - 人工神经网络&#xff1a;基本…

【深入浅出 Spring Security(四)】登录用户数据的获取,超详细的源码分析

登录用户数据的获取 一、SecurityContextHolder 源码分析ListeningSecurityContextHolderStrategy 使用案例SecurityContextPersistenceFilter 说明 二、登录用户数据的获取三、总结 在【深入浅出Spring Security&#xff08;一&#xff09;】Spring Security的整体架构 中叙述…

Gradle 介绍,根据 Gradle 官方文档整理

这部分内容主要根据 Gradle 官方文档整理&#xff0c;做了对应的删减&#xff0c;主要保留比较重要的部分&#xff0c;不涉及实战&#xff0c;主要是一些重要概念的介绍。 Gradle 这部分内容属于可选内容&#xff0c;可以根据自身需求决定是否学习&#xff0c;目前国内还是使用…

python3.10在centos下安装以及配置

python在centos下安装以及配置 1.背景 centos下默认的都是python2.7下载需要更换为3.x使用&#xff0c;目前大部分应用都是基于pyhton3了 具体步骤&#xff1a; 先按装openssh 不安装会报错 而且要安装高版本 要不然不兼容 报错如&#xff1a; WARNING: pip is configured …

【ARMv8 SIMD和浮点指令编程】NEON 加法指令——加法都能玩出花

向量加法包括常见的普通加指令&#xff0c;还包括长加、宽加、半加、饱和加、按对加、按对加并累加、选择高半部分结果加、全部元素加等。如果你和我一开始以为的只有一种普通加&#xff0c;那就太小看设计者了&#xff01;同时这么多加法指令的确会提升我们设计程序的效率&…

AI+是企业管理软件的下一站和终点站

作为GPT综合症的表现&#xff0c;准备陆续写一点关于AI的文章。就从这一篇开始吧。 这篇文章原来是在2019年1月份我发在新浪微博和LinkedIn上的。刚搜了一下&#xff0c;全然不见了踪影。原因大家也都知道。但是&#xff0c;我想那个思想的小火花一定还在&#xff0c;在某处酝…