Информация об изменениях

Сообщение Re[7]: Коды ошибок и отрицательные числа от 01.02.2022 17:48

Изменено 01.02.2022 17:59 Андрей Тарасевич

Re[7]: Коды ошибок и отрицательные числа
Здравствуйте, B0FEE664, Вы писали:

N>>А теперь повторите это для прохождения по элементам в порядке убывания индексов.


BFE>
BFE>for(auto i = v.size()-1; i != -1; --i)
BFE>...
BFE>


Это — правильно, но содержит другой подводный камень. Если вдруг окажется, что `size()` возвращает "маленький" беззнаковый тип, т.е. тип подпадающий под integral promotions, то цикл снова получится бесконечным.

Идиоматический код для обратной итерации до нуля прекрасно известен

for (auto i = v.size(); i > 0; )
{
  --i;
  
  //...
}


или, если вы предпочитаете

for (auto i = v.size(); i-- > 0; )
{
  //...
}


Все.

Эта идиома, еще раз, вам понадобятся не только при работе с беззнаковой арифметикой, но и, как я уже говорил выше, для обратной итерации по любым интервалам, выход за левую границу которых недопустим: интервалы итераторов, интервалы указателей, файлы и т.п. Ее надо знать и уметь ей пользоваться.
Re[7]: Коды ошибок и отрицательные числа
Здравствуйте, B0FEE664, Вы писали:

N>>А теперь повторите это для прохождения по элементам в порядке убывания индексов.


BFE>
BFE>for(auto i = v.size()-1; i != -1; --i)
BFE>...
BFE>


Это — правильно, но содержит другой подводный камень. Если вдруг окажется, что `size()` возвращает "маленький" беззнаковый тип, т.е. тип подпадающий под integral promotions, то цикл снова получится бесконечным.

Идиоматический код для обратной итерации до нуля прекрасно известен

for (auto i = v.size(); i > 0; )
{
  --i;
  
  //...
}


или, если вы предпочитаете

for (auto i = v.size(); i-- > 0; )
{
  //...
}


Все.

Эта идиома, еще раз, пригодится не только при работе с беззнаковой арифметикой, но и, как я уже говорил выше, для обратной итерации по любым интервалам, выход за левую границу которых недопустим: интервалы итераторов, интервалы указателей, и т.п.