我正在尝试使用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
我做错了什么?
答案 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