2016-11-30 2 views
1

Я просто запустить в неприятную ошибку где у меня есть циклвычитание из size_t приводит к большому положительному числу

for (auto i = 0; i < vec.size() -1; ++i) { 
    // 
} 

с VEC будучи std::vector пусты, таким образом, vec.size() -1 вычисляется в 2^64 в моей системе.

Каков правильный способ записи вышеуказанного цикла?

+0

Почему вы просто не перебираете векторный вектор, используя диапазон, основанный на цикле? 'for (const auto & el: vec) {do_something (el);}' – EdChum

+1

Мне просто интересно, почему вы повторяете все элементы, кроме последнего? – Borgleader

+0

@ Borgleader один из тех, кто раздражает «удалять конечные пробельные ситуации» при конкатенации строк – user695652

ответ

8

size_t является тип без знака, следовательно, проблема, просто сделать это таким образом:

for (auto i = 0U; i + 1 < vec.size(); ++i) 

0U добавлены, чтобы сделать i без знака (чтобы избежать предупреждения), но я бы лучше использовать size_t istead из auto в этом случае

0

Каков правильный способ написания вышеуказанного цикла?

Держите петлю такой, какой она есть, но добавьте if - условие, которое вступает в цикл только в том случае, если вектор не пуст.

Смежные вопросы