3 / 3 / 4
Регистрация: 31.01.2013
Сообщений: 98
1

Цикл for с двоеточием

10.06.2014, 19:39. Показов 26165. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, пожалуйста, что это за синтаксис цикла for? Как работает?
C
1
for (auto& team : table)
Чем он отличается от обычного цикла?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2014, 19:39
Ответы с готовыми решениями:

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием...
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень не использовать...

Конструктор с двоеточием
Новичок. Объясните, пожалуйста, что за параметры в конструкторе после скобочек за двоеточием? ...

Запрос с двоеточием
Приветы! Ищем, наример: Секс рассказы: 9718 Сайт, откуда взята фраза на 1 месте и др есть. ...

Атрибуты XML с двоеточием
Здравствуйте! Генерирую XML файл, все работает, лишь проблема с атрибутом, в названии которого...

6
Модератор
Эксперт JS
5202 / 2084 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
10.06.2014, 19:40 2
Как foreach в других языках. Добавился в стандарте C++11
0
3 / 3 / 4
Регистрация: 31.01.2013
Сообщений: 98
10.06.2014, 20:04  [ТС] 3
Так он работает как обычный for? Или у него есть особенность?
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
10.06.2014, 20:21 4
Лучший ответ Сообщение было отмечено CMson как решение

Решение

Да, у него есть особенность. Одна из мозгоразрывающих штучек, подаренных нам C++11 (наряду с волшебными final и override), зависимость языковой конструкции от стандартной библиотеки. Эта разновидность цикла зависит от функций std::begin и std::end.
Синтаксис такой: слева идентификатор для работы с элементом контейнера, справа контейнер. auto автоматически выведет тип, но можно указать и вручную. При объявлении со знаком & (без const) можно изменять содержимое контейнера, без этого знака в идентификатор будут запихивать копии элементов.
Приведённый в примере цикл превращается вот в такое:
C++
1
2
3
4
for(auto __iter = std::begin(table); __iter != std::end(table); ++__iter){
    auto &team = *__iter;
    //...
}
3
3 / 3 / 4
Регистрация: 31.01.2013
Сообщений: 98
10.06.2014, 20:25  [ТС] 5
Спасибо, теперь понятней
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.06.2014, 21:34 6
Nick Alte, если обратиться к стандарту то конструкция разворачивается немного иначе:
6.5.4 The range-based for statement
...
In each case, a range-based for statement is equivalent to
C++
1
2
3
4
5
6
7
8
9
10
{
   auto && __range = range-init;
   for ( auto __begin = begin-expr,
              __end = end-expr;
              __begin != __end;
         ++__begin ) {
      for-range-declaration = *__begin;
      statement
   }
}
Т.е. конечное значение вычисляется однократно, а не на каждой итерации.
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
11.06.2014, 20:59 7
Цитата Сообщение от Tulosba Посмотреть сообщение
если обратиться к стандарту то конструкция разворачивается немного иначе:
Это, конечно, всё хорошо и правильно, но по сути человек, для которого эта разница приобретает практическое значение, заплыл в очень опасные воды: либо меняет контейнер во время перебора элементов, либо связался с контейнером, который чересчур тяжело вычисляет end.
0
11.06.2014, 20:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2014, 20:59
Помогаю со студенческими работами здесь

Парсинг XML с двоеточием
Пытаюсь парсить XML RSS вида: <title>...</title> <link>https://mvd.ru/news/item/7918065/</link>...

Создать папку с двоеточием
Здравствуйте. Пожалуйста подскажите, как создать папку с двоеточием в имени, например "12:30".

Заменить каждую запятую двоеточием
Помогите заменить каждую запятую двоеточием

Условие с двоеточием. Тернарная условная операция
Все здрасьте. Где то я видел очень полезную вещь, но не могу вспомнить как правильно использовать....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru