Чистее ли использовать goto в определенных случаях или вообще избегать?

У меня были некоторые проблемы с практическим собеседованием, и я столкнулся со сценарием, в котором проще всего использовать goto (выход за пределы только внутреннего вложенного цикла). На собеседовании или на рабочем месте я должен просто пойти с версией non goto, чтобы избежать запрещенного ключевого слова, или это нормально, когда goto значительно помогает.

Пример:

        for (int i = 0; i < haystack.size() - needle.size() + 1; i++) {
if (haystack[i] == needle[0]) {
for (int j = 1; j < needle.size(); j++) {
if (haystack[i+j] != needle[j]) {
goto main_loop;
}
}
return i;
}

main_loop: ;
}

против

    for (int i = 0; i < haystack.size() - needle.size() + 1; i++) {
if (haystack[i] == needle[0]) {
bool valid = true;
for (int j = 1; j < needle.size(); j++) {
if (haystack[i+j] != needle[j]) {
valid = false;
}
}
if (valid) {
return i;
}
}
}

-3

Решение

Есть несколько случаев, когда вам нужно перейти, например:

  • Выпадение из гнездовых петель:

    while (some_condition)
    while(some_another_condition)
    if (this_condition_is_false)
    goto out;
    out:
    

    который может быть что-то вроде:

    while (some_condition && !this_condition_is_false)
    while (some_another_condition)
    if (this_condition_is_false)
    break;
    

Итак, есть прежде всего нет причин даже использовать goto больше, кроме уменьшения незаметности прерывания вложенных циклов … и возможности циклов C ++ заставляют его чувствовать себя устаревшим …

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]