C++基础——bitset与vector<bool>


    bitset模板类的一大缺陷(通过其模板形式即知)是:其长度固定,且你必须事先指定其长度。

    C++模板库提供了另外一种通过容器的方式实现的操作bit位的机制,也即vector<bool>vector<T>的一种特化版本。

    bitset<sz>vector<bool>的一个主要区别在于,bitset拥有一套属于自己的机制,而vector<bool>遵循的是普通的STL接口规范。虽然不能实现bitset式的按位处理,但仍然可以通过STL算法形式实现类似功能,如v3 = v1 & v2;

    bool arr[] = {1, 0, 0, 1, 1};
    bool arr2[] = {0, 1, 0, 1, 1};
    vector<bool> v1(arr, arr+5), v2(arr2, arr2+5);
    vector<bool> v3(v1.size());
    std::transform(v1.begin(), v1.end(), v2.begin(), 
                v3.begin(), std::logical_and<int>());
    copy(v3.rbegin(), v3.rend(), ostream_iterator<bool>(cout));
    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 打赏
      打赏
    • 0
      评论
    以下是 `std::vector<bool>` 可能的操作及对应的完整示例: ```cpp #include <iostream> #include <vector> #include <bitset> int main() { // 创建空向量 std::vector<bool> bool_vec; // 添加元素 bool_vec.push_back(true); bool_vec.push_back(false); bool_vec.push_back(true); // 访问元素 std::cout << "bool_vec[0] = " << bool_vec[0] << std::endl; std::cout << "bool_vec[1] = " << bool_vec[1] << std::endl; std::cout << "bool_vec[2] = " << bool_vec[2] << std::endl; // 修改元素 bool_vec[1] = true; // 获取元素个数 std::cout << "bool_vec size = " << bool_vec.size() << std::endl; // 清空向量 bool_vec.clear(); // 判断向量是否为空 if (bool_vec.empty()) { std::cout << "bool_vec is empty" << std::endl; } // 创建指定大小的向量 std::vector<bool> bool_vec2(10); // 获取向量容量 std::cout << "bool_vec2 capacity = " << bool_vec2.capacity() << std::endl; // 调整向量大小 bool_vec2.resize(20); // 获取向量容量 std::cout << "bool_vec2 capacity = " << bool_vec2.capacity() << std::endl; // 获取向量最大元素个数 std::cout << "bool_vec2 max size = " << bool_vec2.max_size() << std::endl; // 获取指向向量首元素的指针 bool* ptr = &bool_vec2[0]; // 按位访问向量元素 for (int i = 0; i < bool_vec2.size(); ++i) { std::cout << "bool_vec2[" << i << "] = " << ((ptr[i / 8] >> (i % 8)) & 1) << std::endl; } // 使用 std::bitset 访问向量元素 std::bitset<20> bs(bool_vec2.to_ulong()); std::cout << "bool_vec2 as bitset: " << bs << std::endl; return 0; } ``` 该示例中,首先创建了一个空的 `std::vector<bool>` 类型变量 `bool_vec`,并使用 `push_back` 方法添加了三个元素。然后,演示了访问和修改元素、获取元素个数、清空向量、判断向量是否为空、创建指定大小的向量、获取向量容量、调整向量大小、获取向量最大元素个数、获取指向向量首元素的指针、按位访问向量元素以及使用 `std::bitset` 访问向量元素等操作及对应的完整示例。 需要注意的是,在使用指针访问 `std::vector<bool>` 中的元素时,需要进行位运算操作。由于 `std::vector<bool>` 中的元素只占用 1 位空间,因此每个元素的地址只能按位访问,不能直接进行读写操作。同时,使用 `std::bitset` 可以方便地将 `std::vector<bool>` 转换为二进制串进行处理。

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    五道口纳什

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值