泛型算法是C++的一大特色,而bitset又是比较重要的一种数据类型,可惜的是bitset并不支持泛型算法。
例如,有一个8位二进制流 “ 11111000 ”(5个1, 3个0), 现在我们希望将这个二进制流的“1段”和“0段”对换,形成一个新的流“00011111”(3个0,5个1)。
对于这个特例,我们可以采用位移“<<”和">>",以及逻辑运算(与或非)来完成,好像并不是很麻烦。但是如果还一个例子呢?比如要把13位二进制流反向。
当然这个也可以使用位移和逻辑运算,不过这样就稍显麻烦了。还有很多其他的特例,用基本的位移和逻辑运算都不会很简单,而且容易粗心出错,并且代码逻辑运算太多,可读性大大降低。
其实上述的特例,都是泛型算法和一般容器就能轻松完成的工作,可惜bitset不支持泛型算法,也不是容器,没有迭代器。那么如果我们能够用某种方法,用泛型算法和容器的方法来解决,那就好了。
其实说来也简单,稍微注意可以发现,bitset有“to_string”这样一个成员函数,当我们调用这个成员之后,可以返回一个对应的字符串,然后对这个字符串做泛型算法或者容器操作(string类型其实就是容器的一种),最后再利用bitset的string构造函数来得到操作之后的beiset,例如:
bitset<8> bitset_8("11111