2011-11-27 3 views
1

J'essaie de comprendre ce que ce morceau de code fait:avertissement constructeur std :: vecteur

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

« lignes » et « » sont les deux Col. entiers.

Il appelle le constructeur, mais je ne sais pas comment. Il est le code exemple je suis arrivé de certains projets ...

Il est également de me donner l'avertissement suivant:

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>   ] 

Quelqu'un pourrait-il aider?

Répondre

7

Il crée un vecteur "bidimensionnel". Il a rows nombre de lignes, et chaque ligne a cols nombre de colonnes, et chaque cellule est initialisée à false (0).

Le constructeur de vector qu'il utilise est celui qui prend le nombre d'éléments qu'il devrait avoir initialement, avec quelle valeur initialiser chaque élément. Donc visited initialement a rows éléments, et chacun est initialisé avec std::vector<bool>(cols, 0), qui a initialement cols nombre d'éléments, et chacun est initialisé avec 0 (qui est false).

Il vous donne cet avertissement car il convertit 0, un nombre entier, à false, un bool. Vous pouvez le réparer en remplaçant 0 par false.

+0

Merci, cela m'a aidé :) – xcrypt

Questions connexes