Предупреждение С++ C4018: '<': несоответствие подписи/без знака

Этот код выдает предупреждения при компиляции его под окнами. Любые решения?

#include<vector> 

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

Ответ 1

Замените все определения int i на size_t i.

std::vector<T>::size() возвращает тип size_t, который не имеет знака (поскольку для контейнеров не имеет смысла содержать отрицательное число элементов).

Ответ 2

Скажите std::size_t i = 0;:

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

Ответ 3

Вместо этого вы можете использовать итераторы, чтобы избежать возможности для предупреждения вообще:

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

Или, если вы используете С++ 11:

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