Integer validation in C++
Using a bool is_valid results in a deeply nested code. You have 5 levels of nesting, with the core of algorithm being hidden at the deepest one. I recommend an early return: as soon as you determine that the string doesn't pass a criteria, return false; immediately.
Testing for length_s == 0 is redundant. In this case s[0] is '\0', which is neither a digit nor a sign.
Passing std::string as an argument makes a copy. Prefer passing a (constant) reference.
Leaving the point of the exercise aside, the best way to validate a number is to just go ahead and directly call std:stoi with the second parameter, e.g.:

    size_t end;
    int number = std::stoi(s, &amp;end);
    if (s[end] != '\0') {
        // The string was not parsed completely. It is not a number.
    }