zoukankan      html  css  js  c++  java
  • C++ std::vector<bool>

    std::vector

    template < class T, class Alloc = allocator<T> > class vector; // generic template
    template <class Alloc> class vector<bool,Alloc>;               // bool specialization(特殊化)
    

    Vector of bool

    This is a specialized version of vector, which is used for elements of type bool and optimizes(最优化) for space.

    It behaves like the unspecialized version of vector, with the following changes:

    The storage is not necessarily an array of bool values, but the library implementation may optimize storage so that each value is stored in a single bit.

    Elements are not constructed using the allocator object, but their value is directly set on the proper bit in the internal storage.

    Member function flip and a new signature(签名) for member swap.

    A special member type, reference, a class that accesses individual bits in the container's internal storage with an interface that emulates(模仿) a bool reference. Conversely(相反的), member type const_reference is a plain bool.

    The pointer and iterator types used by the container are not necessarily neither pointers nor conforming iterators, although they shall simulate(模拟) most of their expected behavior.

    These changes provide a quirky interface to this specialization and favor memory optimization over processing (which may or may not suit your needs). In any case, it is not possible to instantiate the unspecialized template of vector for bool directly. Workarounds to avoid this range from using a different type (char, unsigned char) or container (like deque) to use wrapper types or further specialize for specific allocator types.

    bitset is a class that provides a similar functionality for fixed-size arrays of bits.

    Member functions

    • flip: Flip bits (public member function )
    • swap: Swap containers or elements (public member function )

    Non-member class specializations

    • hash<vector>: Hash for vector (class template specialization )

    Data races

    Simultaneous access to different elements is not guaranteed to be thread-safe (as storage bytes may be shared by multiple bits).

    Example

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main(int argc, char **argv)
    {
        vector<bool> flags;
    
        flags.push_back(true);
        flags.push_back(false);
        flags.push_back(false);
        flags.push_back(true);
    
        flags.flip(); // false true true false
    
        cout << "flags value:";
        for(int i=0; i < flags.size(); i++)
            cout << " " << flags.at(i);
    
        cout << "
    ";
        return 0;
    }
    

    Reference

    cplusplus


  • 相关阅读:
    主进程与渲染进程的异同
    Electron node integration enabled 设置
    JS-函数总结
    JS-变量、作用域、垃圾回收机制总结
    python进阶知识笔记
    高级抽象函数
    mac支持的文件系统
    生成器generator & 迭代器iterator
    磁盘如何做才能让系统识别
    winPE盘能做什么
  • 原文地址:https://www.cnblogs.com/zi-xing/p/6389263.html
Copyright © 2011-2022 走看看