Сообщение Re[7]: Коды ошибок и отрицательные числа от 01.02.2022 17:48
Изменено 01.02.2022 17:59 Андрей Тарасевич
Re[7]: Коды ошибок и отрицательные числа
Здравствуйте, B0FEE664, Вы писали:
N>>А теперь повторите это для прохождения по элементам в порядке убывания индексов.
BFE>
Это — правильно, но содержит другой подводный камень. Если вдруг окажется, что `size()` возвращает "маленький" беззнаковый тип, т.е. тип подпадающий под integral promotions, то цикл снова получится бесконечным.
Идиоматический код для обратной итерации до нуля прекрасно известен
или, если вы предпочитаете
Все.
Эта идиома, еще раз, вам понадобятся не только при работе с беззнаковой арифметикой, но и, как я уже говорил выше, для обратной итерации по любым интервалам, выход за левую границу которых недопустим: интервалы итераторов, интервалы указателей, файлы и т.п. Ее надо знать и уметь ей пользоваться.
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>
Это — правильно, но содержит другой подводный камень. Если вдруг окажется, что `size()` возвращает "маленький" беззнаковый тип, т.е. тип подпадающий под integral promotions, то цикл снова получится бесконечным.
Идиоматический код для обратной итерации до нуля прекрасно известен
или, если вы предпочитаете
Все.
Эта идиома, еще раз, пригодится не только при работе с беззнаковой арифметикой, но и, как я уже говорил выше, для обратной итерации по любым интервалам, выход за левую границу которых недопустим: интервалы итераторов, интервалы указателей, и т.п.
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; )
{
//...
}
Все.
Эта идиома, еще раз, пригодится не только при работе с беззнаковой арифметикой, но и, как я уже говорил выше, для обратной итерации по любым интервалам, выход за левую границу которых недопустим: интервалы итераторов, интервалы указателей, и т.п.