Почему моя программа при итерации с переменной типа size_t не работает (пишет "out of range"), а при типе int работает?

Вот мой код

#include <iostream>
#include <string>
int main() {
    std::string word;
    std::string palindrome;
    std::getline(std::cin, word);
    for (size_t i = word.size() - 1; i >= 0; i--) {
        palindrome.push_back(word[i]);
    }
    for (size_t c = 0; c < word.size(); c++) {
        if (word[c] == ' ') {
            word.erase(c, 1);
            c -= 1;
            
        }
        if (palindrome[c] == ' ') {
            palindrome.erase(c, 1);
            c -= 1;
        }
    }
    if (word == palindrome) {
        std::cout << "YES";
    }
    else {
        std::cout << "NO";
    }
    return 0;
}

в таком виде компилятор выдает ошибку. Однако если я использую в первом цикле for переменную типа int, все работает корректно. Подскажите, в чем может быть проблема?


Ответы (1 шт):

Автор решения: NunOfIt

Проблема в том, что size_t может принимать только неотрицательные значения. Т.е. после нуля идёт не -1, а максимально возможное size_t (18446744073709551615). Проще не париться с size_t и использовать int.

→ Ссылка