C++ Bitset2025 年 8 月 29 日 | 阅读 10 分钟 在 C++ 中,bitset 是一个容器,它包含一个固定大小的位(0 和 1)序列。它使我们能够高效地管理和操作固定大小的位序列。它在低级操作、内存高效存储和位逻辑操作方面很有用。它被实现为一个类模板,并定义在 std 命名空间中的 <bitset> 头文件中。 语法它具有以下语法: 在此语法中,N 是我们想要存储的位数,b 是分配的名称。 Bitset 的初始化在 C++ 中,我们可以根据其用例以几种方式初始化 bitset 函数。Bitset 是一个固定大小的 N 位序列(例如 0 和 1),我们可以单独操作每一位。当我们创建 bitset 时,所有位默认都是未设置(0)。但是,我们可以在声明期间用确定的值对其进行初始化。C++ 中 bitset 的几种初始化方式如下: 1) 默认初始化(所有位 = 0) 在这里,bitset 的大小是 7 位, 2) 使用无符号长整型初始化 我们也可以使用无符号长整型值来初始化 bitset。在无符号长整型中,数字的二进制表示从右到左存储。 3) 使用二进制字符串初始化 字符串必须具有与 bitset 大小相同或更少的字符。多余的位会从左侧截断。 C++ Bitset 示例让我们举一个例子来说明如何在 C++ 中初始化 bitset。 示例编译并运行输出 b1: 00000000 b2: 00001111 b3: 00001111 b4: 10101010 说明 在此示例中,我们演示了如何以不同方式初始化 std::bitset<8>。首先,b1 是默认初始化的(所有位都为 0)。b2 使用整数 15,其二进制表示为 00001111。b3 使用二进制字符串 "00001111"。b4 使用 std::string 和位 "10101010"。 访问位在 C++ 中,std::bitset 容器允许高效地访问和操作任何位置的单个位。有两种主要方法可以访问位。
pos 表示位从 0 开始的索引或位置。它应该在范围 (0 ≤ pos ≤ size - 1) 内;否则,将引发边界异常。 C++ 访问位示例让我们举一个例子来说明如何在 C++ 中访问位。 示例编译并运行输出 Bitset: 11001001 Bit at position 0: 1 Bit at position 5: 0 Bit at position 4 is not set (0). Modified Bitset: 11000001 说明 在此示例中,我们采用了一个 8 位 bitset,并使用二进制值 "11001001" 进行初始化。之后,我们使用 [] 运算符和 test() 函数。这些函数检查特定的位位置并打印它们的值,而 test() 函数用于检查位是否已设置。 设置、重置和翻转位在 C++ 中,std::bitset 提供了许多有用的函数来处理单个位或所有位。我们可以使用 set() 函数将位设置为 1,使用 reset() 函数通过将位设置为 0 来清除位。之后,还可以使用 flip() 函数来切换位的状态。如果位是 1,它会变成 0;如果它是 0,它会变成 1。 C++ 设置、重置和翻转位的示例让我们举一个例子来说明如何在 C++ 中设置、重置和翻转位。 示例编译并运行输出 Original: 00001100 After set(0): 00001101 After set(): 11111111 After reset(3):11110111 After reset(): 00000000 After flip(1): 00000010 After flip(): 11111101 说明 在此示例中,我们采用了 set()、reset() 和 flip() 函数,它们可以处理单个位和整个 bitset。这些操作使我们能够有效地在固定大小的二进制序列中打开、关闭或切换位。 C++ Bitset 中的函数Bitset 在 C++ 中有几个函数。其中一些如下:
现在,我们将逐一讨论这些函数。 bitset::all()在 C++ bitsets 中,此操作用于测试和检查所有位是否都已正确设置。 语法 它具有以下语法: 如果 bitset 中的每个位都是 1,则返回 true;否则返回 false。 C++ bitset::all() 示例让我们举一个例子来说明 C++ 中的 bitset::all() 函数。 示例编译并运行输出 b1.all(): 1 b2.all(): 0 说明 在此示例中,我们演示了 std::bitset 的 .all() 成员函数。它包含适当的头文件并声明了两个 8 位 bitset。初始 bitset b1 的所有位都设置为 1(11111111)。第二个 bitset b2 只有前四位被设置(11110000)。b1.all() 函数返回 true,因为所有位都已设置,但 b2.all() 返回 false,因为并非所有位都已设置。 bitset::any()在 C++ 中,std::bitset 的 .any() 方法返回是否有至少一个位等于 1。
C++ bitset::any() 示例让我们举一个例子来说明 C++ 中的 bitset::any() 函数。 示例编译并运行输出 b1.any(): 0 b2.any(): 1 说明 在此示例中,我们采用了两个 8 位 bitset,b1 的所有位都为 0,b2 的一个位在从右侧开始的第 4 位被设置为 1。之后,在两个 bitset 上调用 any() 方法。对于 b1,any() 函数返回 false (0),因为所有位都为 0。对于 b2,any() 返回 true (1),因为它至少有一个位是 1。 bitset::count() 和 bitset::none()
C++ bitset::count() 和 none() 示例让我们举一个例子来说明 C++ 中的 count() 和 none() 函数。 示例编译并运行输出 b1: 00000000 b1.count(): 0 b1.none(): 1 b2: 10101010 b2.count(): 4 b2.none(): 0 说明 在此示例中,表达式 b1.count() 返回 b1 中设置的 1 的数量,即 0。b1.none() 返回 true,因为 b1 中没有设置为 1 的位。对于 b2,count() 返回 4,因为 bitset 中有四个 1。之后,b2.none() 返回 false,因为并非所有位都设置为 0。每个结果都会显示到两个 bitset 的控制台上。程序通过返回 0 终止。 bitset::operator[], bitset::size() 和 bitset::test()
C++ bitset::operator[], size(), 和 test() 示例让我们举一个例子来说明 C++ 中的 operator[], size(), 和 test() 函数。 示例编译并运行输出 Bitset: 10110010 Size: 8 b[2]: 0 b.test(2): 0 说明 在此示例中,我们首先用二进制值 "10110010" 初始化一个 8 位 bitset b。之后,显示 bitset 以揭示其内容。调用 size() 成员函数以获取 bitset 中的位数,即 8。随后,使用 b[2] 来引用位置 2(从右侧开始)的位,它返回 0。之后,使用 b.test(2) 安全地检查同一位的值,它返回 0。 bitset::to_string(), bitset::to_ullong(), 和 bitset::to_ulong()
C++ to_string(), to_ullong, 和 to_ulong 示例让我们举一个例子来说明 C++ 中的 to_string、to_ullong 和 to_ulong 函数。 示例编译并运行输出 Bitset: 10101010 to_string(): 10101010 to_ulong(): 170 to_ullong(): 170 说明 在此示例中,创建了一个 8 位 bitset b,其二进制值为 10101010。to_string() 函数用于将 bitset 转换为由字符 '1' 和 '0' 组成的字符串,并将其存储在变量 s 中。之后,to_ulong() 操作将 bitset 转换为无符号长整型,to_ullong() 将其转换为无符号长长整型。由于二进制中的 10101010 等于十进制的 170,因此两种数值转换都产生值 170。 为什么 Bitset 是更好的选择在 C++ 中,bitset 是执行按位操作和处理二进制数据的首选类,原因如下:
结论在 C++ 中,bitset 被用作一种优化技术。它使用整个数组或基于向量的 bitset 的固定表示集,以 true 或 false 和 0 和 1 的形式表示,这标志着 bitset 表示在流中的未设置和已设置状态。因此,可以说 bitset C++ 标准库改进并简化了这些过程。 C++ Bitset MCQs1) C++ 中的 std::bitset<8> b1; 语句执行什么操作?
答案: b) 将所有位初始化为 0 2) 在 C++ 中,以下哪个 bitset 函数在至少有一个位被设置时返回 true?
答案: c) any() 3) 如果 b1 = std::bitset<8>("10101010"),则 C++ 中 b1.count() 的输出将是什么?
答案: b) 4 4) 哪个函数在 C++ 中翻转 bitset 中的所有位?
答案: b) flip() 5) 在 C++ 中,以下哪个方法在索引超出范围时会引发异常?
答案: b) test() 下一主题C++ Map |
在 C++ 中,multimap 是 C++ STL(标准模板库)的一部分。Multimap 是像 map 一样的关联容器,它们存储排序的键值对,但与只存储唯一键的 map 不同,multimap 可以有重复的键。默认情况下,它使用 (<) 运算符进行比较……
阅读 13 分钟
在 C++ 中,std::list 是一个序列容器,它允许元素的非连续存储。它实现为双向链表,其中每个元素包含前一个和后一个列表元素的地址。它允许我们将数据存储在……
阅读 15 分钟
在 C++ 中,priority_queue 是 STL 中的一个派生容器,它只考虑优先级最高的元素。队列遵循 FIFO 原则,而 priority_queue 根据优先级弹出元素,即最高优先级的元素首先弹出。它类似于……
阅读 10 分钟
s 在 C++ 中,vector 是标准模板库(STL)的一部分。它们是动态数组,在添加或删除元素时可以自动调整大小。与具有固定大小的数组不同,vector 提供了广泛的灵活性和底层函数,这些函数……
11 分钟阅读
C++ STL Set 在 C++ 中,set 代表基本数据结构,它以某种排序顺序排列唯一元素并存储它们。集合称为关联容器,唯一排序的元素称为排序键。我们可以插入或……
阅读9分钟
在 C++ 中,队列代表基本数据结构,它们根据先进先出(FIFO)逻辑运行。C++ 的标准模板库(STL)通过其现成的组件提供了一个队列类,这些组件可提高队列操作的效率。队列是一种线性数据结构,它通过队列处理元素……
11 分钟阅读
在 C++ 中,deque(双端队列)是一种队列,其中可以在队列的前端和后端添加和删除元素。它支持 FIFO 和 LIFO 操作,这比队列提供了更大的灵活性。在 C++ 中,STL deque 是一个序列容器,它……
11 分钟阅读
函数 C++ 中,标准模板库 (STL) 在 <<algorithm> 头文件中提供了强大的底层函数集合。这些函数有助于对数组、向量、列表和其他容器等序列执行各种操作。算法函数是通用的,并且操作迭代器,...
阅读 24 分钟
教程 编译器 程序 面向对象编程 STL 面试题 C++ STL (标准模板库) 在 C++ 中,标准模板库 (STL) 是一组强大的模板类和函数,提供了通用的数据...
阅读 13 分钟
在 C++ 中,stack 是一种线性数据结构,它遵循后进先出(LIFO)原则执行操作。这意味着最后添加的元素将首先被删除,而最后添加的元素最后被删除。在 C++ 中,STL 提供了一个……
阅读9分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India