C++ Primer 学习笔记整理
在C++编程中,`bitset`是一个非常实用的工具,它提供了对二进制位集的高效管理和操作。`bitset`类型位于标准库`<bitset>`中,它允许程序员方便地处理一系列的位,就像处理整数一样,但具有更细粒度的控制。`bitset`的长度在创建时必须指定,通常以`bitset<n>`的形式,其中`n`是位的数目。
### bitset对象的定义和初始化
1. `bitset<n> b;` 创建一个具有`n`位的`bitset`,所有位都被初始化为0。
2. `bitset<n> b(u);` 创建一个`bitset`,其内容是`unsigned long`类型变量`u`的二进制表示,从右向左填充`bitset`的低位。
3. `bitset<n> b(s);` 从字符串`s`初始化`bitset`,`s`应只包含字符'0'和'1'。
4. `bitset<n> b(s, pos, n);` 从字符串`s`的特定位置`pos`开始,取`n`个字符初始化`bitset`。
### bitset对象的位序
`bitset`对象的最低位对应于下标0,向左依次递增,最高位对应于下标`n-1`。位的顺序遵循右低左高的规则,这意味着右边的位是最低阶位。
### bitset对象的初始化示例
例如,如果有一个字符串`str = "11001010"`,创建一个`bitset<32>`并用`str`初始化,结果将是:
```
bitset<32> bitvec(str);
// bitvec 的内容为:0000 0000 0000 0000 0000 0000 1100 1010
```
这里,`bitvec[0]`是字符串中的最低位,而`bitvec[7]`是最高位(在32位`bitset`中,最高位是第31位)。
### bitset对象的操作
- `b.any()`:检查`bitset`中是否存在至少一个置位(值为1)的位,如果存在则返回`true`,否则返回`false`。
- `b.none()`:测试`bitset`中所有位是否都未被置位(值为0),如果都是0则返回`true`,否则返回`false`。
- `b.count()`:计算`bitset`中置位位的个数,返回一个整数值。
### 关于C++ Primer中的其他章节
- **模板与范型编程**:模板是C++中的一个核心特性,允许创建泛型代码,适用于多种数据类型。`template`关键字用于声明模板,可以是函数模板或类模板。类型参数如`T`代表一个未指定的具体类型,在实例化模板时会被替换为实际类型。
- **面向对象编程**:C++支持面向对象编程,包括类、继承、虚函数和动态绑定。继承使得一个类可以从另一个类派生,获取基类的属性和行为。虚函数允许通过基类指针或引用调用派生类的成员函数,实现多态性。
- **重载操作符与转换**:C++允许重载内置操作符,为自定义类型提供类似内置类型的运算。`operator+`、`operator-`等可以被重载,使得用户定义的类能够支持自然的表达式语法。
以上是关于`bitset`和C++ Primer中其他关键概念的简要介绍,深入学习这些内容将有助于提高C++编程能力,并能更有效地利用C++的高级特性。