0 / 0 / 0
Регистрация: 11.12.2020
Сообщений: 13
1

Как это работает? Объясните for(auto const row : Al) for (auto const element : row)

11.12.2020, 22:38. Показов 5045. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main (){
    const int row = 2;
    const int columns = 3;
    array<arrayint, columns>, rows> Al = {1,2,3,4,5,6,};
 
//C++11
    for(auto const row : Al) { 
        for (auto const element : row) { 
        cout <<element << “”; //
 
    }
    cout<<endl;
 
    }
 
 
    return 0;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2020, 22:38
Ответы с готовыми решениями:

Как исправить ошибку if(auto const& (val: stime))
Строка 46 if(auto const&amp; (val: stime)) #include &lt;iostream&gt; #include &lt;stdexcept&gt; #include...

Что при присваивается i в for(const auto& i : iVec1) ?
Есть объявление вектора vector&lt;int&gt; iVec1 = {0,1,2,3,4,5}; Почему следующие два варианта...

Объясните, пожалуйста, что именно означает 1)DataColumn(string)row[“ColumnName”] и 2)(Type)row[“DataType”]
1) DataColumn((string)row индексатор объекта DataRow возвращает object поэтому будем явно...

Некорректно работают функции Auto-Tone, Auto contrast, Auto color
Не корректно работают функции Auto-Tone, Auto contrast, Auto color. Вот пример (как на картинке)....

6
367 / 309 / 64
Регистрация: 14.10.2014
Сообщений: 1,309
11.12.2020, 22:57 2
Лучший ответ Сообщение было отмечено Sky__Walker как решение

Решение

Sky__Walker, обычный диапазонный цикл - проходим по коллекции, "вытаскивая" из неё элементы и присваиваем их переменной auto const row. Да, кстати, в коде есть небольшие синтаксические ошибки.

компилятор развернёт этот код примерно вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int main()
{
  const int row = 2;
  const int columns = 3;
  array<array<int, columns>, row> Al = {{{{1, 2, 3}}, {{4, 5, 6}}}};
  {
    std::array<std::array<int, 3>, 2> & __range1 = Al;
    std::array<int, 3> * __begin1 = __range1.begin();
    std::array<int, 3> * __end1 = __range1.end();
    for(; __begin1 != __end1; ++__begin1) 
    {
      const std::array<int, 3> row = std::array<int, 3>(*__begin1);
      {
        const std::array<int, 3> & __range2 = row;
        const int * __begin2 = __range2.begin();
        const int * __end2 = __range2.end();
        for(; __begin2 != __end2; ++__begin2) 
        {
          const int element = *__begin2;
          std::operator<<(std::cout.operator<<(element), " ");
        }
        
      }
      std::cout.operator<<(std::endl);
    }
    
  }
  return 0;
}
Добавлено через 2 минуты
то есть по сути - это всего лишь то, что зовётся "синтаксическим сахаром". На деле (как это видит компилятор) это всего лишь обычный цикл for в "новой обёртке"
0
0 / 0 / 0
Регистрация: 11.12.2020
Сообщений: 13
11.12.2020, 23:33  [ТС] 3
Благодарю

Добавлено через 4 минуты
Recrut_rf, а если по строчкам что делает цикл ? Можете пожалуйста обьяснить?
0
367 / 309 / 64
Регистрация: 14.10.2014
Сообщений: 1,309
11.12.2020, 23:48 4
Sky__Walker, ну если совсем в "общем", то array<array<int, columns>, row> Al это есть обычный двумерный статический массив. Ну а дальше создаются два цикла for, один вложен в другой т. е. :

C++
1
2
3
4
5
6
   for(;;)
   {
       for(;;)
       {
        }
    }
В первом цикле идём по строкам, во втором по значениям этих строк. То есть в первом цикле фор зашли на строку 0 - пошли дальше во второй цикл фор. В нем вывели элементы нулевой строки. Вышли из цикла фор (который второй внутренний) - во внешнем перешли на строку 1 - далее опять во внутренний - вывели все элементы. Как то так.
0
Вездепух
Эксперт CЭксперт С++
10921 / 5916 / 1615
Регистрация: 18.10.2014
Сообщений: 14,871
12.12.2020, 01:06 5
Цитата Сообщение от Sky__Walker Посмотреть сообщение
Как это работает?
Никак это не работает. Идентификатора arrayint вашем коде не объявлено. Код некорректен. Ответ Recrut_rf к вашему вопросу никакого отношения не имеет.
1
2341 / 1869 / 606
Регистрация: 29.06.2020
Сообщений: 7,057
12.12.2020, 02:31 6
Цитата Сообщение от Sky__Walker Посмотреть сообщение
array<arrayint, columns>, rows> Al = {1,2,3,4,5,6,};
там просто потерялась скобка
рабочий код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//g++  7.4.0
 
#include <iostream>
#include <array>
int main()
{
    const int rows = 2;
    const int columns = 3;
    std::array<std::array<int, columns>, rows> Al = {1,2,3,4,5,6,};
 
//C++11
    for(auto const row : Al) 
    {
        for (auto const element : row) 
        {
            std::cout <<element << " "; //
        }
        std::cout<<std::endl;
    }
    return 0;     
}
вывод :
1 2 3
4 5 6
у нас имеется массив массивов, то есть двумерный массив
ключевое слово auto :
Начиная с C++11, ключевое слово auto при инициализации переменной может использоваться вместо типа переменной, чтобы сообщить компилятору, что он должен присвоить тип переменной исходя из инициализируемого значения. Это называется выводом типа (или «автоматическим определением типа данных компилятором»).
C++
1
for (auto var: collection){//...}
как уже упоминали выше для прохода по коллекции

Добавлено через 2 минуты
p.s. Помните о таких фактах, как основано на диапазоне for :
Такие циклы автоматически распознают массивы.
Такие циклы автоматически распознают контейнеры с методами .begin() и .end().
Для всех остальных итераторов в них используются поиск, зависящий от аргументов (begin() и end()).
1
0 / 0 / 0
Регистрация: 11.12.2020
Сообщений: 13
13.12.2020, 00:40  [ТС] 7
Большое Вам спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.12.2020, 00:40
Помогаю со студенческими работами здесь

Что это bool operator== (const CLASS&) const;
Что это? class CLASS { public: bool operator== (const CLASS&amp;) const; ...

int const * const foo(const int* param) const - разъясните значение квалификаторов
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ?...

Static CONST =10; Как это работает?
class class1 { public static final int CONST; static { CONST = 10; } } Что это...

For(auto const& val : stime) .cpp(47) : error C2143: синтаксическая ошибка: отсутствие "," перед ":"
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdexcept&gt; #include &lt;locale&gt; #include...

Элемент из одного row рядом с элементом другого row Bootstrap 4
Доброго всем времени суток! Есть линдос, который делится на 3-ри строки: Но в планшетной версии...

FOR EACH ROW BEGIN - Как это?
Всем доброго времени суток! Столкнулся я с конструкцией создание триггера в MySQL: DELIMITER |...


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

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

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