ACM程序设计(第2版)
上QQ阅读APP看书,第一时间看更新

2.10 bitset位集合容器

bitset容器是一个bit位元素的序列容器,每个元素只占一个bit位,取值为0或1,因而很节省内存空间。图2-8是一个bitset的存储示意图,它的10个元素只使用了两个字节的空间。

图2-8 bitset的存储示意图

使用bitset,需要声明头文件包含语句“#include <bitset>”, bitset文件在C:\Program Files\Microsoft Visual Studio\VC98\Include文件夹下。

bitset类提供的方法见下表。

bitset类的方法列表(bitset<n> b)

2.10.1 创建bitset对象

创建bitset对象时,必须要指定容器的大小。bitset对象的大小一经定义,就不能修改了。

下面这条语句就定义了bitset对象b,它能容纳100000个元素,即100000个bit(位),此时,所有元素的值都为0。

        bitset<100000> b

2.10.2 设置元素值

(1)采用下标法。

        #include <bitset>
        #include <iostream>
        using namespace std;

       int main(int argc, char * argv[])
        {
          bitset<10> b;
          //采用下标法给元素赋值
          b[1]=1;
          b[6]=1;
          b[9]=1;
          //下标法输出所有元素,第0位是最低位,第9位是最高位

        int i;
        for(i=b.size()-1; i>=0; i--)
        {
            cout<<b[i];
        }
        cout<<endl;
        return 0;
      }

运行结果:

      1001000010

(2)采用set()方法,一次性将元素设置为1。

      #include <bitset>
      #include <iostream>
      using namespace std;

     int main(int argc, char * argv[])
      {
        bitset<10> b;
        //采用set()方法,一次性将元素设置为1
        b.set();
        //下标法输出所有元素,第0位是最低位,第9位是最高位
        int i;
        for(i=b.size()-1; i>=0; i--)
        {
            cout<<b[i];
        }
        cout<<endl;
        return 0;
      }

运行结果:

      1111111111

(3)采用set(pos)方法,将某pos位设置为1。

      #include <bitset>
      #include <iostream>
      using namespace std;

     int main(int argc, char * argv[])
      {
        bitset<10> b;
        //采用set(pos)方法,将元素设置为1
        b.set(1,1);
        b.set(6,1);
        b.set(9,1);
        //下标法输出所有元素,第0位是最低位,第9位是最高位
        int i;

        for(i=b.size()-1; i>=0; i--)
        {
            cout<<b[i];
        }
        cout<<endl;
        return 0;
      }

运行结果:

        1001000010

(4)采用reset(pos)方法,将某pos位设置为0。

        #include <bitset>
        #include <iostream>
        using namespace std;

       int main(int argc, char * argv[])
        {
          bitset<10> b;
          //采用set()方法,将元素全部设置为1
          b.set();
          //采用reset(pos)方法,将元素设置为0
          b.reset(0);
          b.reset(2);
          b.reset(3);
          b.reset(4);
          b.reset(5);
          b.reset(7);
          b.reset(8);
          //下标法输出所有元素,第0位是最低位,第9位是最高位
          int i;
          for(i=b.size()-1; i>=0; i--)
          {
              cout<<b[i];
          }
          cout<<endl;
          return 0;
        }

运行结果:

        1001000010

2.10.3 输出元素

(1)采用下标法输出元素。

        #include <bitset>
        #include <iostream>
        using namespace std;

      int main(int argc, char * argv[])
      {
        bitset<10> b;
        //采用set()方法,将元素全部设置为1
        b.set();
        //采用set(pos)方法,将元素设置为0
        b.set(0,0);
        b.set(2,0);
        b.set(3,0);
        b.set(4,0);
        b.set(5,0);
        b.set(7,0);
        b.set(8,0);
        //下标法输出所有元素,第0位是最低位,第9位是最高位
        int i;
        for(i=b.size()-1; i>=0; i--)
        {
            cout<<b[i];
        }
        cout<<endl;
        return 0;
      }

运行结果:

      1001000010

(2)直接向输出流输出全部元素。

      #include <bitset>
      #include <iostream>
      using namespace std;

     int main(int argc, char * argv[])
      {
        bitset<10> b;
        //采用set()方法,将元素全部设置为1
        b.set();
        //采用set(pos)方法,将元素设置为0
        b.set(0,0);
        b.set(2,0);
        b.set(3,0);
        b.set(4,0);
        b.set(5,0);
        b.set(7,0);
        b.set(8,0);
        //直接向输出流输出全部元素
        cout<<b<<endl;
        return 0;
      }

运行结果:

        1001000010