Есть ли эквивалент цикла «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, предикат которого не должен изменять свой аргумент), и он имеет доступ к внешней области.
    • Это более читаемо, чем определение специального макроса.
    • Он не требует каких-либо специальных переменных флага.

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

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