[英]Initialization of simple bool vector in c++ fails
我正在嘗試使用假值初始化一個簡單的向量,然后使用它。 我認為該值永遠不會為0或1,所以我將其打印出來。 結果是,即使在開始時,它也具有奇特的大價值。 我正在使用g ++(GCC)4.4.7進行編譯。 問題是僅打印bool類型的矢量數據。
我做了什么:
std::vector<bool> n;
int f = 0;
for(f = 0; f<10; f++)
n.push_back(false);
for(f = 0; f<10; f++)
printf("content of %d %d",f,n[f]);
我得到了:
content of 0 30572784
content of 1 30572784
content of 2 30572784
content of 3 30572784
content of 4 30572784
content of 5 30572784
content of 6 30572784
content of 7 30572784
content of 8 30572784
content of 9 30572784
我究竟做錯了什么?
要初始化布爾向量,可以使用文檔http://www.cplusplus.com/reference/vector/vector/vector/中給出的fill構造函數
std::vector<bool> n(10, false); (*)
問題是%d
是用於int
(32位)的,但是要使bool
的vector
更節省空間, vector<bool>
是一個專用類,它通過使用代理類將bool作為單個位存儲。 並且, operator []
實際上返回該代理類的引用( http://en.cppreference.com/w/cpp/container/vector_bool )
如果要使用printf
,則需要先將其轉換為布爾值
for(f = 0; f<10; f++)
printf("content of %d %d",f,bool(n[f]));
或者,正如其他人在評論中提到的那樣,在C ++中使用cout
。
cout << "content of " << f <<" " << n[f];
如果要查看是/ std::boolalpha
,也可以使用std::boolalpha
cout << boolalpha << "content of " << f <<" " << n[f]; //will see true/false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.