std :: vector构造函数的警告

时间:2011-11-27 01:48:06

标签: c++ vector

我正在试图找出这段代码的作用:

std::vector<std::vector<bool> > visited(rows, std::vector<bool>(cols, 0));

'rows'和'cols'都是整数。

它调用构造函数,但我不确定如何。 这是我从某个项目获得的示例代码......

它还给了我以下警告:

c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector(2140): warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector(2126) : see reference to function template instantiation 'void std::vector<_Ty,_Ax>::_BConstruct<_Iter>(_Iter,_Iter,std::_Int_iterator_tag)' being compiled
1>          with
1>          [
1>              _Ty=bool,
1>              _Ax=std::allocator<bool>,
1>              _Iter=int
1>          ]
1>          c:\ai challenge\code\project\project\state.cpp(85) : see reference to function template instantiation 'std::vector<_Ty,_Ax>::vector<int>(_Iter,_Iter)' being compiled
1>          with
1>          [
1>              _Ty=bool,
1>              _Ax=std::allocator<bool>,
1>              _Iter=int
1>          ]

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:7)

它正在创建一个“二维”矢量。它的行数为rows,每行的列数为cols,每个单元格初始化为false0)。

它正在使用的vector的构造函数是最初应该具有的元素数量的构造函数,以及用于初始化每个元素的值。因此visited最初有rows个元素,每个元素都使用std::vector<bool>(cols, 0)进行初始化,最初有cols个元素,每个元素都使用0进行初始化(false)。

它会向您发出警告,因为它正在将0(整数)转换为falsebool。您可以将0替换为false来修复此问题。