簡體   English   中英

在C ++中初始化簡單布爾向量失敗

[英]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位)的,但是要使boolvector更節省空間, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM