Вы должны исправить, а не подавить. Используйте тип без знака:
for (size_t i = 0; i < blahs.size(); ++i)
Вы также можете использовать unsigned
, но size_t
здесь более уместно (и может иметь другой, больший диапазон). Если вы используете i
только для итерации и вам не нужно его значение в цикле, используйте вместо этого итераторы:
for (auto iter = blahs.begin(), end = blahs.end(); iter != end; ++iter)
Если ваш компилятор не поддерживает auto
, замените auto
на T::iterator
или T::const_iterator
, где T
- это тип blahs
. Если ваш компилятор поддерживает более полное подмножество C ++ 11, сделайте следующее:
for (auto& element : blahs)
Что лучше всего.
Строго говоря, вышесказанное не является "правильным". Должно быть:
typedef std::vector<Blah> blah_vec;
blah_vec blahs;
for (blah_vec::size_type i = 0; i < blahs.size(); ++i)
Но это может быть многословно, и каждая известная мне реализация в любом случае использует size_t
как size_type
.
Если по какой-то причине вам действительно нужен целочисленный тип со знаком для i
, вам придется разыграть:
// assumes size() will fit in an int
for (int i = 0; i < static_cast<int>(blahs.size()); ++i)
// assumes i will not be negative (so use an unsigned type!)
for (int i = 0; static_cast<size_t>(i) < blahs.size(); ++i)
// and the technically correct way, assuming i will not be negative
for (int i = 0; static_cast<blah_vec::size_type>(i) < blahs.size(); ++i)