Форум программистов, компьютерный форум CyberForum.ru

Прервать цикл из цикла, вложенного в него - C++

Восстановить пароль Регистрация
 
 
d7d1cd
163 / 86 / 21
Регистрация: 30.06.2011
Сообщений: 765
02.09.2016, 09:53     Прервать цикл из цикла, вложенного в него #1
Приветствуют. Собственно, вопрос в названии темы.
C++
1
2
3
4
5
6
7
8
9
for(int i = 1; i <= 10; i++)
 for(int j = 1; j <= 5; j++)
{
 if(/* здесь условие выхода из обоих циклов */)
  {
   /* как выйти сразу из 2-х циклов? */
   /* break даст выход только из цикла j */
  }
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nimazzzy
 Аватар для nimazzzy
366 / 322 / 92
Регистрация: 29.03.2016
Сообщений: 1,068
Завершенные тесты: 1
02.09.2016, 09:58     Прервать цикл из цикла, вложенного в него #2
- Заводить дополнительную булеву переменную, которую проверять в условии внешнего цикла, выставлять во внутреннеим.
- goto
d7d1cd
163 / 86 / 21
Регистрация: 30.06.2011
Сообщений: 765
02.09.2016, 10:02  [ТС]     Прервать цикл из цикла, вложенного в него #3
nimazzzy, то есть, специального оператора в С++ для этого нет?
gru74ik
Модератор
 Аватар для gru74ik
3116 / 1342 / 167
Регистрация: 20.02.2013
Сообщений: 3,809
Записей в блоге: 17
02.09.2016, 10:08     Прервать цикл из цикла, вложенного в него #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от d7d1cd Посмотреть сообщение
специального оператора в С++ для этого нет?
Есть. Оберните Ваши циклы в функцию или в лямбду и выходите с помощью return.
nimazzzy
 Аватар для nimazzzy
366 / 322 / 92
Регистрация: 29.03.2016
Сообщений: 1,068
Завершенные тесты: 1
02.09.2016, 10:10     Прервать цикл из цикла, вложенного в него #5
Цитата Сообщение от d7d1cd Посмотреть сообщение
специального оператора в С++ для этого нет?
Специального оператора нет.
Hikari
Хитрая блондиночка $)
 Аватар для Hikari
1336 / 899 / 272
Регистрация: 21.12.2015
Сообщений: 3,604
02.09.2016, 10:10     Прервать цикл из цикла, вложенного в него #6
Цитата Сообщение от gru74ik Посмотреть сообщение
Ваши циклы в функцию или в лямбду
Вотъ вотъ-с.
И я того же мнения. Плюсую.
d7d1cd
163 / 86 / 21
Регистрация: 30.06.2011
Сообщений: 765
02.09.2016, 10:16  [ТС]     Прервать цикл из цикла, вложенного в него #7
Цитата Сообщение от gru74ik Посмотреть сообщение
Оберните Ваши циклы в функцию или в лямбду и выходите с помощью return.
Это понятно. Спасибо за ответ.
Эммм... А что такое лямбда?
Hikari
Хитрая блондиночка $)
 Аватар для Hikari
1336 / 899 / 272
Регистрация: 21.12.2015
Сообщений: 3,604
02.09.2016, 10:19     Прервать цикл из цикла, вложенного в него #8
Цитата Сообщение от d7d1cd Посмотреть сообщение
что такое лямбда?
https://ru.wikipedia.org/wiki/Анонимная_функция
nimazzzy
 Аватар для nimazzzy
366 / 322 / 92
Регистрация: 29.03.2016
Сообщений: 1,068
Завершенные тесты: 1
02.09.2016, 10:19     Прервать цикл из цикла, вложенного в него #9
http://en.cppreference.com/w/cpp/language/lambda
d7d1cd
163 / 86 / 21
Регистрация: 30.06.2011
Сообщений: 765
02.09.2016, 10:26  [ТС]     Прервать цикл из цикла, вложенного в него #10
Hikari, nimazzzy, спасибо за ссылки. Дома почитаю (на работе интернет урезан, эти сайты не открываются).
Может кто-то перепишет мой пример с циклами и покажет как использовать эту анонимную функцию?
nimazzzy
 Аватар для nimazzzy
366 / 322 / 92
Регистрация: 29.03.2016
Сообщений: 1,068
Завершенные тесты: 1
02.09.2016, 10:35     Прервать цикл из цикла, вложенного в него #11
C++
1
2
3
4
5
6
7
8
    auto f = []()
    {
        for (int i = 1; i <= 10; i++)
            for (int j = 1; j <= 5; j++)
                if (i > 2)
                    return;
    };
    f();
gru74ik
Модератор
 Аватар для gru74ik
3116 / 1342 / 167
Регистрация: 20.02.2013
Сообщений: 3,809
Записей в блоге: 17
02.09.2016, 10:48     Прервать цикл из цикла, вложенного в него #12
d7d1cd, учтите, чтобы использовать лямбды, компилятор должен поддерживать стандарт C++11. И очень часто бывает так, что поддержку стандарта C++11 надо галками в настройках IDE отдельно включать, либо прописывать в файлах настройки проекта специальные строчки, чтобы поддержка С++11 включилась.
d7d1cd
163 / 86 / 21
Регистрация: 30.06.2011
Сообщений: 765
02.09.2016, 10:50  [ТС]     Прервать цикл из цикла, вложенного в него #13
Цитата Сообщение от gru74ik Посмотреть сообщение
d7d1cd, учтите, компилятор должен поддерживать стандарт C++11. И очень часто бывает так, что поддержку стандарта C++11 надо галками в настройках IDE отдельно включать, либо прописывать в файлах настройки проекта специальные строчки, чтобы поддержка С++11 включилась.
Видимо у меня не включен стандарт С++11, так как приведенный пример в C++Builder XE8 вызывает ошибку Expression syntax.
Как включить?
MansMI
1046 / 843 / 205
Регистрация: 08.01.2012
Сообщений: 3,026
02.09.2016, 10:52     Прервать цикл из цикла, вложенного в него #14
как вариант
C++
1
2
3
4
5
6
7
8
9
10
for(int i = 1; i <= 10; i++)
{
   int j;
   for(j = 1; j <= 5; j++)
   {
      .....
      if(почему-то) break;
   }
   if(j<=5) break;
}
d7d1cd
163 / 86 / 21
Регистрация: 30.06.2011
Сообщений: 765
02.09.2016, 10:56  [ТС]     Прервать цикл из цикла, вложенного в него #15
MansMI, это конечно вариант, спасибо. Именно на таких вариантах-костылях у меня сейчас и работает код. Но хочется познать всю мощь языка С++
gru74ik
Модератор
 Аватар для gru74ik
3116 / 1342 / 167
Регистрация: 20.02.2013
Сообщений: 3,809
Записей в блоге: 17
02.09.2016, 11:07     Прервать цикл из цикла, вложенного в него #16
Цитата Сообщение от d7d1cd Посмотреть сообщение
C++Builder XE8
Билдер весьма избирательно поддерживает плюсовые стандарты. По крайней мере, это точно так было с родным билдеровским компилятором. Последнее время, насколько мне известно, Embarcadero решили использовать какую-то свою модификацию компилятора clang 3.3, так что, возможно, в новых версиях Билдера что-то изменилось с поддержкой стандарта в лучшую сторону. В любом случае, по этому вопросу лучше создайте отдельную тему в соответствующем разделе (см. правила форума, п. 4.4).

Самый простой выход: установите QtCreator или MS Visual Studio 2015.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2134 / 967 / 223
Регистрация: 30.11.2013
Сообщений: 3,236
02.09.2016, 11:09     Прервать цикл из цикла, вложенного в него #17
gru74ik, просто локальная функция в конкретной единицы трансляции не проще чем сменить IDE ?
nimazzzy
 Аватар для nimazzzy
366 / 322 / 92
Регистрация: 29.03.2016
Сообщений: 1,068
Завершенные тесты: 1
02.09.2016, 11:10     Прервать цикл из цикла, вложенного в него #18
Проще и эффективнее - просто goto.
gru74ik
Модератор
 Аватар для gru74ik
3116 / 1342 / 167
Регистрация: 20.02.2013
Сообщений: 3,809
Записей в блоге: 17
02.09.2016, 11:22     Прервать цикл из цикла, вложенного в него #19
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
gru74ik, просто локальная функция в конкретной единицы трансляции не проще чем сменить IDE ?
Я бы сменил IDE, потому что:
Цитата Сообщение от d7d1cd Посмотреть сообщение
хочется познать всю мощь языка С++
Добавлено через 1 минуту
Цитата Сообщение от nimazzzy Посмотреть сообщение
Проще и эффективнее - просто goto.
Как вариант - да. Но большинство сразу же покроет вас позором и презрением, мало что ссаными тряпками бросаться не начнёт
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2016, 11:59     Прервать цикл из цикла, вложенного в него
Еще ссылки по теме:

Оператор вложенного цикла C++
Объясните работу вложенного цикла C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2801 / 1577 / 247
Регистрация: 03.05.2010
Сообщений: 3,663
02.09.2016, 11:59     Прервать цикл из цикла, вложенного в него #20
Цитата Сообщение от gru74ik Посмотреть сообщение
чтобы использовать лямбды, компилятор должен поддерживать стандарт C++11.
А если использовать auto для параметров, то нужен С++14.
Yandex
Объявления
02.09.2016, 11:59     Прервать цикл из цикла, вложенного в него
Ответ Создать тему
Опции темы

Текущее время: 11:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru