C++ для начинающих. алгоритм foreach

На этой странице описан относительно простой материал по одному из алгоритмов в C++. Рассматриваемый алгоритм — алгоритм for_each. В старых компиляторах этого алгоритма нет, поэтому имейте это ввиду.

Вообще, если кто знаком с английским языком, то может автоматом читать этот алгоритм как: «Для каждого» Прочитал и дальше вопросы: «А Что для каждого?» В общем, продолжение выражения «для каждого» будет зависеть от программиста. Алгоритм for_each является алгоритмом и словно просит закончить свой смысл. Чем-то он похож на человека, который ищет смысл жизни. Алгоритм for_each ищет смысл своего существования. Тем кто хорошо знает английский язык доступно много справочной информации на понятном ему языке. Я знаю английский оооочень плохо и поэтому при необходимости пользуюсь переводчиками, но машинный перевод иногда страшно чудит и из-за этого труднее понимать справки.

Вот всё понятно написано http://www.cplusplus.com/reference/algorithm/for_each/ только на английском.

  • for_each — алгоритм обхода по умолчанию

Самый первый и скорее всего самый простой пример использования for_each — Это обход элементов массива

Формула числа элементов массива читается как общий размер массива делим на тип первого элемента массива и получаем необходимый размер.

В момент вызова алгоритма мы объясняем алгоритму необходимые данные.
Первый параметр M — наш массив. Имя массива есть указатель на первый его элемент.
Второй параметр М+len. К массиву добавляем целое. Этот прием часто используется и называется как адресная арифметика. При прибавлении к указателю целого значения получается адрес. Будет этот адрес новым или нет зависит от програмиста, важно понимать, что таким приемом мы получили указатель на последний элемент массива.
Третий параметр — имя самой обычной функции. Имя функции как и имя массива является указателем, вот этот самый указатель и используется третьим параметром.

Когда алгоритм начинает работу, то после получения значения с какого-то адреса памяти, он (алгоритм for_each) вызывает функцию, указатель на которую использован как третий параметр. Пока не будет достигнут второй адрес, который указан вторым параметром в алгоритме, будет происходить повтор событий
Прочитал в память адрес, вызвал функцию, выполнил работу функции, прочитал адрес памяти, вызвал функцию, выполнил работу…

    Общие выводы по примеру

  • Алгоритм for_each требует для работы 3 параметра
  • Алгоритм for_each умеет принимать 3 указателя
  • В Алгоритме for_each первыми двумя параметрами указывается диапазон, третьим параметром указыветя указатель на функцию, которую алгоритм должен выполнить.

Давайте посмотрим небольшое продолжение. В этом продолжении я НЕ открою Америку, но будет понятно, что значит домыслить смысл алгоритма. Я добавлю одну максимально простую функцию, которая будет увеличивать элементы в 2 раза

Если здесь не указать знак амперсанда, то значения будут менятся только внутри функции, но не вне ее. Чтобы это знать нужно знать тему параметры функций. Но то другая тема. Здесь же этот пример просто для небольшого закрепления всего вышесказанного.

Важно отметить, что та функция, которую использует алгоритм for_each может возвращать какое-то значение, мало ли для чего та функция будет нужна, но при работе функции внутри алгоритма такое значение будет просто игнорироваться. Чтобы это понять можно посмотреть простой пример.

Это нюанс следует иметь ввиду, потому как незнание такой мелочи может немного сбить с толку.

В связи с тем, что указатели очень похожи на итераторы, легко использовать итераторы для указания диапазона.

Еще один пример использования алгоритма, который может оказаться полезным, но немного не так очевиден новичкам как вышеописанные

Буду надеяться, что кому-то смог помочь описанием такой совсем несложной темы.
При необходимости добавьте задержку в конец фнкции main перед return
например cin.get();

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

4 комментария: C++ для начинающих. алгоритм foreach

  • мир говорит:

    void operator () ( int i) пожалуйста обисните
    эту строчку. (int i)-здес параметр что ли?




    0



    0
  • Guest говорит:

    void operator () ( int i) принимает параметр типа int и печатает его на экран.

    void — нет возвращаемого значения.




    0



    0
  • Аноним говорит:

    void operator () ( int i)

    это перегрузка скобок, что бы после объявления объекта obj, можно было ему передать в скобках аргумент, иначе в скобках можно передать при объявлении.




    0



    0
  • Руслан говорит:

    Это ФУНКТОР! Структура состоит только из функции(перегруженного оператора вызова скобок функции)! void operator() (int i) нужен для того, чтоб когда пишешь obj, тоесть вызываешь обьект этой структуры, то срабатывает перегрузка оператора скобки и тем самым вызыватся функция! Вроде так…если нет то поправьте)




    0



    0

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/tatyana-pavlovskaya/c-c-strukturnoe-i-obektno-orientirovannoe-programmirovanie-praktikum-586035/?lfrom=15589587
Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

- Что ты пишешь? - спросили программиста. - Сейчас запустим - узнаем! - ответил программист.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок