上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