C ++警告C4018:'<' :签名/未签名不匹配

时间:2011-11-18 20:00:28

标签: c++ warnings

当我在windows下编译时,此代码会抛出警告。任何解决方案?

#include<vector> 

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

3 个答案:

答案 0 :(得分:48)

int i的所有定义替换为size_t i

std::vector<T>::size()返回未签名的size_t类型(因为容器中包含负数的元素没有意义)。

答案 1 :(得分:7)

std::size_t i = 0;

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

答案 2 :(得分:5)

您也可以使用迭代器来避免发生警告的可能性:

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

或者如果你正在使用C ++ 11:

for (int i : v)
{
    ...
}