Мне нужно прокрутить строку назад.
// std::string str assumed to be defined at this point
for (std::size_t i = str.length() - 1; i >= 0; i--) {
// perform some check on str[i]
}
Описание проблемы
Теперь, если я использую индекс цикла int i
, это работает, потому что в конечном итоге я стану -1, и цикл завершится. При использовании std::size_t i
(беззнакового) для текущего индекса он станет чем-то действительно большим при переходе «ниже» нуля, поэтому цикл не завершается и в конечном итоге приведет к ошибке сегментации. Каков предпочтительный способ решения этой проблемы, учитывая, что я хочу использовать std::size_t в качестве типа индекса цикла, поскольку std::string::length возвращает std::size_t, а не int.
Возможное решение
for (std::size_t i = str.length(); i > 0; i--) {
// perform some check on str[i - 1]
}
Я думаю, что это действительно уродливо, поскольку мы используем i как «смещенный» idx, который не интуитивно понятен. Какие были бы чистые решения для этого?
std::size_t
— число без знака. Беззнаковые числа всегда>=0
. - person Algirdas Preidžius   schedule 08.11.2019>=0
) всегда будет истинным из-за природыunsigned
. Он просто написал наблюдения о том, что происходит, когда вы это делаете. Я утверждал, что вообще не нужно проводить тест. - person Algirdas Preidžius   schedule 08.11.2019