ACM模板库

ACM模板库


bitset

<pre><code class="language-cpp"> bitset&lt;4&gt; bitset1;  //无参构造,长度为4,默认每一位为0 bitset&lt;8&gt; bitset2(12);  //长度为8,二进制保存,前面用0补充 string s = "100101"; bitset&lt;10&gt; bitset3(s);  //长度为10,前面用0补充 char s2[] = "10101"; bitset&lt;13&gt; bitset4(s2);  //长度为13,前面用0补充 cout &lt;&lt; bitset1 &lt;&lt; endl;  //0000 cout &lt;&lt; bitset2 &lt;&lt; endl;  //00001100 cout &lt;&lt; bitset3 &lt;&lt; endl;  //0000100101 cout &lt;&lt; bitset4 &lt;&lt; endl;  //0000000010101</code></pre> <pre><code class="language-cpp"> bitset&lt;2&gt; bitset1(12);  //12的二进制为1100(长度为4), //但bitset1的size=2,只取后面部分,即00 string s = "100101";   bitset&lt;4&gt; bitset2(s);  //s的size=6,而bitset的size=4,只取前面部分,即1001 char s2[] = "11101"; bitset&lt;4&gt; bitset3(s2);  //与bitset2同理,只取前面部分,即1110 cout &lt;&lt; bitset1 &lt;&lt; endl;  //00 cout &lt;&lt; bitset2 &lt;&lt; endl;  //1001 cout &lt;&lt; bitset3 &lt;&lt; endl;  //1110</code></pre> <pre><code class="language-cpp"> bitset&lt;4&gt; foo (string("1001")); bitset&lt;4&gt; bar (string("0011")); cout &lt;&lt; (foo^=bar) &lt;&lt; endl; // 1010 (foo对bar按位异或后赋值给foo) cout &lt;&lt; (foo&amp;=bar) &lt;&lt; endl; // 0010 (按位与后赋值给foo) cout &lt;&lt; (foo|=bar) &lt;&lt; endl; // 0011 (按位或后赋值给foo) cout &lt;&lt; (foo&lt;&lt;=2) &lt;&lt; endl; // 1100 (左移2位,低位补0,有自身赋值) cout &lt;&lt; (foo&gt;&gt;=1) &lt;&lt; endl; // 0110 (右移1位,高位补0,有自身赋值) cout &lt;&lt; (~bar) &lt;&lt; endl; // 1100 (按位取反) cout &lt;&lt; (bar&lt;&lt;1) &lt;&lt; endl; // 0110 (左移,不赋值) cout &lt;&lt; (bar&gt;&gt;1) &lt;&lt; endl; // 0001 (右移,不赋值) cout &lt;&lt; (foo==bar) &lt;&lt; endl; // false (0110==0011为false) cout &lt;&lt; (foo!=bar) &lt;&lt; endl; // true (0110!=0011为true) cout &lt;&lt; (foo&amp;bar) &lt;&lt; endl; // 0010 (按位与,不赋值) cout &lt;&lt; (foo|bar) &lt;&lt; endl; // 0111 (按位或,不赋值) cout &lt;&lt; (foo^bar) &lt;&lt; endl; // 0101 (按位异或,不赋值)</code></pre> <pre><code class="language-cpp"> bitset&lt;4&gt; foo ("1011"); cout &lt;&lt; foo[0] &lt;&lt; endl;  //1 cout &lt;&lt; foo[1] &lt;&lt; endl;  //1 cout &lt;&lt; foo[2] &lt;&lt; endl;  //0</code></pre> <pre><code class="language-cpp"> bitset&lt;8&gt; foo ("10011011"); cout &lt;&lt; foo.count() &lt;&lt; endl;  //5   //(count函数用来求bitset中1的位数,foo中共有5个1 cout &lt;&lt; foo.size() &lt;&lt; endl;   //8   //(size函数用来求bitset的大小,一共有8位 cout &lt;&lt; foo.test(0) &lt;&lt; endl;  //true  ( //test函数用来查下标处的元素是0还是1,并返回false或true,此处foo[0]为1,返回true cout &lt;&lt; foo.test(2) &lt;&lt; endl;  //false  (同理,foo[2]为0,返回false cout &lt;&lt; foo.any() &lt;&lt; endl;  //true  (any函数检查bitset中是否有1 cout &lt;&lt; foo.none() &lt;&lt; endl;  //false  (none函数检查bitset中是否没有1 cout &lt;&lt; foo.all() &lt;&lt; endl;  //false  (all函数检查bitset中是全部为1</code></pre> <pre><code class="language-cpp"> bitset&lt;8&gt; foo ("10011011"); cout &lt;&lt; foo.flip(2) &lt;&lt; endl;  //10011111   //(flip函数传参数时,用于将参数位取反,本行代码将foo下标2处"反转",即0变1,1变0 cout &lt;&lt; foo.flip() &lt;&lt; endl;   //01100000   //(flip函数不指定参数时,将bitset每一位全部取反 cout &lt;&lt; foo.set() &lt;&lt; endl;    //11111111   //(set函数不指定参数时,将bitset的每一位全部置为1 cout &lt;&lt; foo.set(3,0) &lt;&lt; endl;  //11110111   //(set函数指定两位参数时,将第一参数位的元素置为第二参数的值,本行对foo的操作相当于foo[3]=0 cout &lt;&lt; foo.set(3) &lt;&lt; endl;   //11111111   //(set函数只有一个参数时,将参数下标处置为1 cout &lt;&lt; foo.reset(4) &lt;&lt; endl;  //11101111   //(reset函数传一个参数时将参数下标处置为0 cout &lt;&lt; foo.reset() &lt;&lt; endl;   //00000000   //(reset函数不传参数时将bitset的每一位全部置为0</code></pre> <pre><code class="language-cpp"> bitset&lt;8&gt; foo ("10011011"); string s = foo.to_string();  //将bitset转换成string类型 unsigned long a = foo.to_ulong();  //将bitset转换成unsigned long类型 unsigned long long b = foo.to_ullong();  //将bitset转换成unsigned long long类型 cout &lt;&lt; s &lt;&lt; endl;  //10011011 cout &lt;&lt; a &lt;&lt; endl;  //155 cout &lt;&lt; b &lt;&lt; endl;  //155</code></pre>

页面列表

ITEM_HTML