[問題] bitset subscript operator
一些特殊原因,要拆解一點 bitset 出來,
為方便討論,討論前提基於 bitset 只有一個函式成員,
unsigned m32;
並假設 sizeof(unsigned) = 32 bits。
----------
一般 operatr[] 大多是用在成員有 array 上面,
這些都算好寫,但 bitset 較特別,
它是用在第幾個 bit 上面。
上 c++ reference 看,operator[] 原型有兩種
bool operator[] ( size_t pos ) const;
reference operator[] ( size_t pos );
第一種還可以推斷得出來, 是要提取出 pos-th bit 之真偽,可能長這樣
bool operator[] (size_t pos) const {
return (m32 & (1U<<pos)) != 0U;
}
第二種 return type 是 reference ,後來再查發現,
應該是 bitset 繼承的 class , 請問這個 reference class 大體長怎樣?
又第二種 reference operator[] (size_t pos) 該如何實現較佳?
最後再問二個問題
Q2 : bool 是否可將 true 視為 1 ; false 視為 0 , 拿來參與四則運算?
Q3 : vector<bool> 有經過特偏化 (是特偏化吧?) 壓縮空間,
bitset< n > 要 runtime 確定長度 ,
那我需要一個 runtime size 的 bitset , 過程中會用到
(1) clear, resize.
(2) operator[pos]
(3) to_ulong() ,這個可能要自己寫
可以偷用 vector<bool> 嗎 (雖然覺得好像也沒比較好 Orz )?
謝謝各位不吝解惑,感激不盡。
--
「自從我學了 C# , 人都變聰明 , 考試都考一百分」
「自從我學了 VB , 皮膚都變好 , 人也變漂亮了 」
「自從我學了 Java , 明顯變壯 , 個子也變高了 」
「自從我學了 C++ , 內分泌失調 , 頭都禿了... 」
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.161
→
06/25 20:38, , 1F
06/25 20:38, 1F
→
06/25 20:38, , 2F
06/25 20:38, 2F
→
06/25 20:39, , 3F
06/25 20:39, 3F
→
06/25 20:39, , 4F
06/25 20:39, 4F
→
06/25 20:39, , 5F
06/25 20:39, 5F
→
06/25 20:40, , 6F
06/25 20:40, 6F
→
06/25 20:42, , 7F
06/25 20:42, 7F
→
06/25 20:44, , 8F
06/25 20:44, 8F
→
06/25 20:44, , 9F
06/25 20:44, 9F
→
06/25 20:45, , 10F
06/25 20:45, 10F
抱歉,我該講清楚。 忘了在哪本 Effective 裡面的 Item 提到,
vector<bool> 實際上不是一個 container,
原本一個 element 應該要存 1 bytes, 但 vector<bool> 只用 1bit,
所以該 Item 提出 「never use vector<bool>」之類的敘述。
而 Q3 重點是在於,若只有那三項操作時,使用 vector<bool> 會不會出包,
如果會出包、不適用 vector<bool>,那就是該解決 bitset operator[] 問題。
※ 編輯: EdisonX 來自: 180.177.76.161 (06/25 20:51)
→
06/25 20:51, , 11F
06/25 20:51, 11F
→
06/25 20:53, , 12F
06/25 20:53, 12F
→
06/25 20:56, , 13F
06/25 20:56, 13F
→
06/25 21:27, , 14F
06/25 21:27, 14F
→
06/25 21:31, , 15F
06/25 21:31, 15F
→
06/25 21:38, , 16F
06/25 21:38, 16F
→
06/25 21:39, , 17F
06/25 21:39, 17F
→
06/25 21:41, , 18F
06/25 21:41, 18F
→
06/25 21:53, , 19F
06/25 21:53, 19F
→
06/25 21:53, , 20F
06/25 21:53, 20F
→
06/25 22:17, , 21F
06/25 22:17, 21F
→
06/25 22:18, , 22F
06/25 22:18, 22F
→
06/26 00:35, , 23F
06/26 00:35, 23F
→
06/26 00:36, , 24F
06/26 00:36, 24F
→
06/26 00:36, , 25F
06/26 00:36, 25F
→
06/26 00:38, , 26F
06/26 00:38, 26F
→
06/26 00:39, , 27F
06/26 00:39, 27F
→
06/26 00:40, , 28F
06/26 00:40, 28F
→
06/26 00:41, , 29F
06/26 00:41, 29F
→
06/26 00:41, , 30F
06/26 00:41, 30F
→
06/26 01:17, , 31F
06/26 01:17, 31F
→
06/26 02:40, , 32F
06/26 02:40, 32F
→
06/26 02:47, , 33F
06/26 02:47, 33F
→
06/26 02:47, , 34F
06/26 02:47, 34F
→
06/26 02:48, , 35F
06/26 02:48, 35F
→
06/26 02:50, , 36F
06/26 02:50, 36F