web-dev-qa-db-ja.com

C ++警告C4018: '<':符号付き/符号なしの不一致

このコードをWindowsでコンパイルすると、警告がスローされます。解決策はありますか?

#include<vector> 

int main(){
  std::vector<int> v;
  //...
  for (int i = 0; i < v.size(); ++i) { //warning on this line
    //...
  }
}
21
ruhungry

_int i_のすべての定義を_size_t i_に置き換えます。

std::vector<T>::size()は、符号なしの型_size_t_を返します(コンテナが負の数の要素を含むことは意味がないため)。

50
user213313

いう std::size_t i = 0;

for (std::size_t i = 0; i != v.size(); ++i) { /* ... */ }
7
Kerrek SB

代わりにイテレータを使用して、警告の可能性を完全に回避することもできます。

for (std::vector<int>::const_iterator i = v.begin(); i != v.end(); ++i)
{
    ...
}

または、C++ 11を使用している場合:

for (int i : v)
{
    ...
}
5
Steve Folly