bitset類模板提供了非常直接的介面進行與string型別資料的轉換。然而一些需要注意的細節又是非常繁瑣。具體如何繁瑣,且看下文分解。在閱讀本文之前,你需要知道bitset模板類實現的基礎,即非型別模板引數技術。
bitset<>類模板的非型別引數的例項化,構造時可以接受乙個string型別,且bitset<>::to_string
成員函式可以實現向string
型的轉換。但需注意的一點是,string
為引數的構造以及to_string
都是成員模板,因為庫類std::basic_string
本身也是乙個模板,一般的string類形式,std::string
是basic_string
的別稱:
typedef basic_string, allocator >
string;
因為string型別引數的構造以及to_string
都是以成員模板的形式定義的,所以(新的c++標準放寬了這些條件,但為了嚴格,以及閱讀稍早期一點**的方便,還是整理出來):
// 推擠寫法
std::bitset
<6>(std::string("110101"));
// 而不是
std::bitset
<6>("110101");
第二種版本可能會發生編譯錯誤在一些老式的編譯器上,因為編譯器不知道如何進行例項化。同樣地,因為成員模板函式的特性,不可以直接這樣寫:
string s =b.to_string();
你必須寫成這樣乙個醜八怪:
string s =
b.template to_string,
allocator >();
b.template
的存在是為了告訴編譯器,其後的第乙個<
不是小於號,而是模板引數列表的格式。
template
bitset
from_string(const
string& s)
這時客戶端程式:
bitset
<6> b = from_string<6>("110101");
這裡隱式地存在乙個const string& s = "110101";
的轉換。
template
std::string to_string(const
std::bitset
& b)
StringBuilder類與String類的區別
url string 物件是不可改變的。每次使用 system.string 類中的方法之一或進行運算時 如賦值 拼接等 時,都要在記憶體中建立乙個新的字串物件,這就需要為該新物件分配新的空間。而 stringbuilder 則不會。在需要對字串執行重複修改的情況下,與建立新的 string 物件相...
位運算與bitset
將兩個數轉化為二進位制後,對應的位置上相同即取,通常取1,所以 通常情況下可以用來列舉子集 設x為表示集合的整數,那麼這個整數有如下性質 x的子集整數y在數值上不會比x大。因為x的子集y只是保留了x某些位置上的1,所以y總可以加上乙個非負的整數z等於x,相當於把沒選的1補上。根據這個性質可知,可以通...
bitset位向量用法 c
首先要匯入bitset庫 include bitset初始化 舉些例子 bitset 16 foo 16位全為0輸出 0000000000000000 bitset 16 foo 5 共16位,值為5輸出 0000000000000101 int h 1,m 1 bitset 10 foo h 6 ...