第三章

        在头文件中最好使用完全限定的标准库名字,防止其中的using声明被应用于包含此头文件的源文件中。

3.2.2
cin>>string;          //从第一个非空白字符到第一个空白字符,空白符任然存在于输入流中
getline(cin,line);    //读取到第一个换行符,并将换行符舍弃后存入line,换行符从输入流中除去
3.2.3

        string对象和字符串字面值连接时,“+”操作符左右至少有一个string对象。

string s1 = "hello"; // no punctuation
string s2 = "world";
string s3 = s1 + ", "; // ok: adding a string and a literal
string s4 = "hello" + ", "; // error: no string operand
string s5 = s1 + ", " + "world"; // ok: each + has string operand
string s6 = "hello" + ", " + s2; // error: can't add string literals

3.4

         const 迭代器是迭代器常量,该迭代器本身的值不能修改,即该迭代器在定义时需要初始化,而且初始化之后,不能再指向其他元素。若需要指向固定元素的迭代器,则可以使用 const 迭代器。
         const_iterator 是一种迭代器类型,对这种类型的迭代器解引用会得到一个指向 const 对象的引用,即通过这种迭代器访问到的对象是常量。该对象不能修改,因此,const_iterator 类型只能用于读取容器内的元素,不能修改元素的值。若只需遍历容器中的元素而无需修改它们,则可以使用 const_iterator。

3.5 bitset

初始化 bitset 对象的方法
bitset<n> b;                        b有n位,每位都为0
bitset<n> b(u);    b是unsigned long u的一个副本
bitset<n> b(s);                    b是string对象s中含有位串的副本
bitset<n> b(s,pos,n);b是s中从位置pos开始的n个位的副本
        当用 unsigned long 值作为 bitset 对象的初始值时,该值将转化为二进制的位模式。而 bitset 对象中的位集作为这种位模式的副本。如果 bitset 类型长度大于 unsigned long 值的二进制位数,则其余的高阶位将置为 0;如果 bitset 类型长度小于 unsigned long 值的二进制位数,则只使用 unsigned 值中的低阶位,超过 bistset 类型长度的高阶位将被丢弃。
         在 32 位 unsigned long 的机器上,十六进制值 0xffff 表示为二进制位就是十六个 1 和十六个 0(每个 0xf 可表示为 1111)。可以用 0xffff 初始化 bitset 对象:
// bitvec1 is smaller than the initializer
bitset<16> bitvec1(0xffff);            // bits 0 ... 15 are set to 1
// bitvec2 same size as initializer
bitset<32> bitvec2(0xffff);           // bits 0 ... 15 are set to 1,16 ... 31 are 0
// on a 32-bit machine, bits 0 to 31 initialized from 0xffff
bitset<128> bitvec3(0xffff);          // bits 32 through 127initialized to zero
string 对象初始化 bitset 对象
        当用 string 对象初始化 bitset 对象时,string 对象直接表示为位模式。从 string 对象读入位集的顺序是从右向左(from right to left): 
string strval("1100");
bitset<32> bitvec4(strval);
         bitvec4 的位模式中第 2 和 3 的位置为 1,其余位置都为 0。如果 string 对象的字符个数小于 bitset 类型的长度,则高阶位置为 0。 string 对象和 bitsets 对象之间是反向转化的:string 对象的最右边字符(即下标最大的那个字符)用来初始化 bitset 对象的低阶位(即下标为 0 的位)。当用 string 对象初始化 bitset 对象时,记住这一差别很重要。
         不一定要把整个 string 对象都作为 bitset 对象的初始值。相反,可以只用某个子串作为初始值:
string str("1111111000000011001101");
bitset<32> bitvec5(str, 5, 4);                // 4 bits starting at str[5], 1100
bitset<32> bitvec6(str, str.size() - 4);      // use last 4characters
         这里用 str 从 str[5] 开始包含四个字符的子串来初始化 bitvec5。照常,初始化 bitset 对象时总是从子串最右边结尾字符开始的,bitvec5 的从 3 到 0 的二进制位置为 1100 ,其他二进制位都置为 0。如果省略第三个参数则意味着取从开始位置一直到 string 末尾的所有字符。本例中, 取出 str 末尾的四位来对 bitvec6 的低四位进行初始化。bitvec6 其余的位初始化为 0。
bitset操作

        其操作大多数是针对于“1”的操作,如b.any( )是测试b中是否存在置为1的二进制位。有几个特殊的操作符:

b.flip( )将b中所有二进制位取反
b.to_ulong( )                                        将b中同样的二进制位返回一个unsigned long值
os<<b把b中的位集输出到os流
如果 bitset 对象包含的二进制位数超过 unsigned long 长度,将会产生运行时异常。
bitset<32> bitvec2(0xffff); // bits 0 ... 15 are set to 1; 16 ...31 are 0
cout << "bitvec2: " << bitvec2 << endl;
输出结果为:bitvec2: 00000000000000001111111111111111 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值