Есть ли эквивалент цикла «for … else» Python в C ++?

У Python есть интересный оператор, который позволяет указать условие else .

В конструкции, подобной этой:

 for i in foo: if bar(i): break else: baz() 

предложение else выполняется после for , но только если for завершает нормально (не break ).

Я задавался вопросом, был ли эквивалент в C ++? Могу ли я использовать for ... else ?

    5 Solutions collect form web for “Есть ли эквивалент цикла «for … else» Python в C ++?”

    Более простой способ выразить свою фактическую логику – это std::none_of :

     if (std::none_of(std::begin(foo), std::end(foo), bar)) baz(); 

    Если предложение диапазона для C ++ 17 принимается, мы надеемся, это упростит:

     if (std::none_of(foo, bar)) baz(); 

    Если не против использования goto также можно сделать следующим образом. Это экономит от дополнительных, if проверка и более широкое объявление переменной видимости.

     for(int i = 0; i < foo; i++) if(bar(i)) goto m_label; baz(); m_label: ... 

    Да, вы можете добиться такого же эффекта:

     auto it = std::begin(foo); for (; it != std::end(foo); ++it) if(bar(*it)) break; if(it == std::end(foo)) baz(); 

    Это моя грубая реализация в C ++:

     bool other = true; for (int i = 0; i > foo; i++) { if (bar[i] == 7) { other = false; break; } } if(other) baz(); 

    Для этого вы можете использовать функцию лямбда:

     [&](){ for (auto i : foo) { if (bar(i)) { // early return, to skip the "else:" section. return; } } // foo is exhausted, with no item satisfying bar(). ie, "else:" baz(); }(); 

    Это должно вести себя точно так же, как Python «for..else», и оно имеет некоторые преимущества перед другими решениями:

    • Это настоящая замена для «for..else»: раздел «for» может иметь побочные эффекты (в отличие от none_of, предикат которого не должен изменять свой аргумент), и он имеет доступ к внешней области.
    • Это более читаемо, чем определение специального макроса.
    • Он не требует каких-либо специальных переменных флага.

    Но … я бы использовал неуклюжую флаговую переменную.

     
    Interesting Posts for Van-Lav

    Импорт переменных из объекта пространства имен в Python

    Может ли группа pandas группироваться в список, а не суммировать, понимать и т. Д.?

    Невозможно сравнить наивные и осведомленные данные datetime.now () <= challenge.datetime_end

    Что означает выход алгоритма кластеризации Брауна?

    socket.error: Разрешение отклонено при создании поддельного почтового сервера

    Удаление six.b из нескольких файлов

    Удалите строку NaN из массива X, а также соответствующую строку в Y

    «ValueError: невозможно фильтровать изображения палитры» во время преобразования Pytesseract

    Возможно ли получить доступ к API GetLongPathName () Win32 в Python?

    Как индексировать URL-параметры в Python?

    Pythonic способ найти максимальное значение и его индекс в списке?

    добавить столбцы разной длины pandas

    Сортировка списка по нескольким атрибутам?

    Sl4A Передача намерения в минималистичный текстовый виджет

    JSON ValueError: Ожидание имени свойства: строка 1 столбец 2 (символ 1)

    Python - лучший язык программирования в мире.