Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 140
∙ повысить рейтинг »
mklokov
Статус: 6-й класс
Рейтинг: 106
∙ повысить рейтинг »
quirck
Статус: 1-й класс
Рейтинг: 96
∙ повысить рейтинг »

∙ С / С++

Номер выпуска:1918
Дата выхода:25.07.2017, 16:15
Администратор рассылки:Андрей Кузнецов aka Dr_Andrew (Старший модератор)
Подписчиков / экспертов:26 / 23
Вопросов / ответов:1 / 1

Консультация # 191233: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: почему не будет работать цикл для диапазона внутри приведенной ниже функции для обработки массива неизвестного размера вместо того, что там сейчас?
...

Консультация # 191233:

Уважаемые эксперты! Пожалуйста, ответьте на вопрос: почему не будет работать цикл для диапазона внутри приведенной ниже функции для обработки массива неизвестного размера вместо того, что там сейчас?

//функция displayArray - отображает элементы массива
//integerArray длиной sizeOfloatArray
void displayArray (int integerArray[], int sizeOfloatArray)
{
for (int i = 0; i < sizeOfloatArray; i++)
{
cout << i << ": " << integerArray [i] << endl;
}
}


Ведь размер массива будет передан в функцию...

Дата отправки: 20.07.2017, 15:47
Вопрос задал: pNod (1-й класс)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Хватов Сергей (Академик):

Здравствуйте, pNod!

С помощью дополнительных вопросов выяснилось, что вас интересует цикл, перебирающий коллекцию:

for(auto &element: collection) {...}

На самом деле это всего лишь syntax sugar (русского термина не знаю) для классического перебора:
for auto (pointer = collection->begin();pointer!=collection->end();pointer++){auto &element = *pointer;...}

Есть особый случай: такой цикл можно применять для массивов, но только если их размер известен компилятору. Можно даже в inline функции использовать (хотя это уже трюкачество). Вот пример с кое-какими комментариями:
#include <iostream>

// SZ в функции не встречается, но он всё равно необходим!
template<typename T, size_t SZ>
void pr_arr(const T (&a)[SZ]) {
    for (const T &p: a)
        std::cout << p << ::std::endl;
}
int main () {
    static const int ia[] = {1,6,7,2,8,5,9};
    static const double fa[] = {.1,.6,.7,.2,.8,.5,.9};
    pr_arr("Hello, world!");
    pr_arr(ia);
    pr_arr(fa);

    int n=10; // const int n=10 исправит проблему, но это, вероятно, уже оптимизация так работает  smile  
    int a[n]; // такое уже допустимо
    for (auto &b: a) b = 3;
    //pr_arr(a); // а это не пройдёт компиляцию: размер массива компилятору неизвестен

    return 0;
}


Консультировал: Хватов Сергей (Академик)
Дата отправки: 21.07.2017, 15:17

5
нет комментария
-----
Дата оценки: 25.07.2017, 11:23

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное