作者shadow0326 (非議)
看板C_and_CPP
標題Re: [問題] vector<bool>
時間Wed Dec 28 23:27:12 2011
原則上,可以用bitset甚至deque<bool>,但是不要使用vector<bool>
原因在於vector<bool>裡面存的不是bool,它不是真正的STL container
vector<bool>在標準裡面被規定成"每一個元素只佔 1位元(bit)"
當初這麼規定似乎是為了空間最佳化等等的理由
但這個規定導致了諸多後遺症
例如 vector<bool> 的 iterator 或 operator [] 沒辦法返回一個bool&
所以下面這段code理論上無法成功編譯
bool *b = &v[0]; //假設v是vector<bool>
總之雖然現有的標準中存在 vector<bool>
但標準委員會認為應該避免使用它
參照:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2204.html
※ 引述《wheniam64 (嘿)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: C++
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: 問題(Question):
: 寫一個class中的private member用到 vector
: 於是#include<vector>
: 我寫: vector<bool> a(10);
: 但是compiler一直不給我過,可是這語法應該沒問題
: 請教版上前輩這問題如何解決
: 感謝!!
: 餵入的資料(Input):
: 預期的正確結果(Expected Output):
: 錯誤結果(Wrong Output):
: 感謝提醒
: 他寫: expected `;' before '(' token
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: 補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.162.59.213
推 chinting:好像有點懂了!感謝你~~ 12/28 23:50
推 elfkiller:哇 原來有這個問題 大推 12/29 00:13
→ loveme00835:其實會用的人就不會寫出 bool *b = &v[0]; 這寫法 12/29 02:01
推 tyc5116:另外問一下,vector<bool>適用在何種情況? 12/29 08:33
→ diabloevagto:不建議用那種方式了...如果要用到就用bitset 12/29 09:02