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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
CMson
2 / 2 / 2
Регистрация: 31.01.2013
Сообщений: 96
#1

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

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

Подскажите, пожалуйста, что это за синтаксис цикла for? Как работает?
C
1
for (auto& team : table)
Чем он отличается от обычного цикла?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2014, 19:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Цикл for с двоеточием (C++):

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

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

Получить все символы,расположенные между первым и вторым двоеточием - C++
2.Известно что в исходной строке есть двоеточие.получить все символы,расположенные между первым и вторым двоеточием.если второго двоеточия...

Из строи получить фрагменты текста, которые расположены между первым и вторым двоеточием - C++
Помогите, пожалуйста, с написание лабы. задача такая: На экран вывести из каждой строки только те фрагменты текста, которые расположены...

Почему цикл на при 1 уходит в бесконечный цикл? - C++
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <stdio.h> #include <string.h> int main() { int x=0, y=0,...

Цикл: цикл for вообще никак не воспринимается транслятором - C++
Пишу программу, которая производит различные действия с одномерным массивом. Возникла следующая проблема: цикл for вообще никак не...

6
FraidZZ
Ex-Member
3898 / 1524 / 229
Регистрация: 06.01.2013
Сообщений: 4,050
Завершенные тесты: 1
10.06.2014, 19:40 #2
Как foreach в других языках. Добавился в стандарте C++11
0
CMson
2 / 2 / 2
Регистрация: 31.01.2013
Сообщений: 96
10.06.2014, 20:04  [ТС] #3
Так он работает как обычный for? Или у него есть особенность?
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
10.06.2014, 20:21 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Да, у него есть особенность. Одна из мозгоразрывающих штучек, подаренных нам 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
CMson
2 / 2 / 2
Регистрация: 31.01.2013
Сообщений: 96
10.06.2014, 20:25  [ТС] #5
Спасибо, теперь понятней
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
11.06.2014, 20:59 #7
Цитата Сообщение от Tulosba Посмотреть сообщение
если обратиться к стандарту то конструкция разворачивается немного иначе:
Это, конечно, всё хорошо и правильно, но по сути человек, для которого эта разница приобретает практическое значение, заплыл в очень опасные воды: либо меняет контейнер во время перебора элементов, либо связался с контейнером, который чересчур тяжело вычисляет end.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2014, 20:59
Привет! Вот еще темы с ответами:

Цикл for/Цикл while Помогите срочно пожалуйста... - C++
1.Вычислить и вывести на экран в виде таблицы значения функции F от x1 до x2 с шагом dx. где a, b и c - действительные числа. 2.Цикл...

Задание на цикл с параметром и цикл с постусловием - C++
Помогите пожалуйста написать программу с этими циклами. 1. Вычислить и напечатать таблицу значений функции Z= (e^-x)sinx для 0<=x<=П,...

Цикл с параметром и цикл с условием - C++
1. Составить программу вычисления суммы первых 10 непарных чисел 2. Дано числовой ряд и некоторое число "епсила". Найти сумму...

заменить цикл for на цикл while - C++
#include <iostream> using namespace std; int main() { int N, M, sum; cout << "Введите число N:" << endl; ...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
11.06.2014, 20:59
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru