在c ++中初始化简单bool向量失败

时间:2018-04-21 16:21:27

标签: c++ vector initialization

我正在尝试使用false值初始化一个简单的向量,然后使用它。 我重新定义了值永远不会是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

我做错了什么?

2 个答案:

答案 0 :(得分:0)

要初始化bool向量,可以使用文档中给出的fill构造函数 http://www.cplusplus.com/reference/vector/vector/vector/

std::vector<bool> n(10, false); (*)

答案 1 :(得分:0)

问题是%d适用于int(32位),但要使vector bool更节省空间,vector<bool>是一个专门的类通过使用代理类将bool存储为单个位。并且,operator []实际上返回该代理类的引用(http://en.cppreference.com/w/cpp/container/vector_bool

如果您想使用printf,则需要先将其强制转换为bool

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

cout << boolalpha << "content of " << f <<" " << n[f]; //will see true/false