Re: С++ в относительно новых стандартах
Добавлено: 08 янв 2021, 21:45
Задача: заменить алгоритм for_each() STL (т.е. C++11/14/17, конечно ... но все же мы знаем откуда ноги растут? ) на операторный цикл.
Зачем?
Элементарно, Ватсон:
- есть огромный практический проект...
- который писали много лет (до 10-12) разные люди (числом до 100), многих (большинство) из которых на сегодня и в фирме нет, чтобы спросить...
- проект нужно поддерживать и развивать...
- а по телу проекта раскидано множество for_each() использующих функторы обрабатывающие элементы контейнеров STL...
И всё бы хорошо ... до тех пор, пока не требуются (для диагностики, отладки, расширения функциональности) получить информацию (новые данные) об итогах обработки, причём получить непосредственно из класса функтора, не залезая в само содержимое контейнеров.
Простейшая формулировка (модельной) задачи: есть вектор случайных положительных целых в диапазоне 0...100. Класс-функтор, пробегая вектор, обращает нечётные значения в отрицательные, меняет знак.
Вопрос: узнать по итогу выполнения операции сколько чисел было обращено? (не залезая с подсчётами в сам контейнер ... считаем что он недоступен ... или его элементы имеют весьма сложную структуру чтобы её ковырять).
Зачем?
Элементарно, Ватсон:
- есть огромный практический проект...
- который писали много лет (до 10-12) разные люди (числом до 100), многих (большинство) из которых на сегодня и в фирме нет, чтобы спросить...
- проект нужно поддерживать и развивать...
- а по телу проекта раскидано множество for_each() использующих функторы обрабатывающие элементы контейнеров STL...
И всё бы хорошо ... до тех пор, пока не требуются (для диагностики, отладки, расширения функциональности) получить информацию (новые данные) об итогах обработки, причём получить непосредственно из класса функтора, не залезая в само содержимое контейнеров.
Простейшая формулировка (модельной) задачи: есть вектор случайных положительных целых в диапазоне 0...100. Класс-функтор, пробегая вектор, обращает нечётные значения в отрицательные, меняет знак.
Вопрос: узнать по итогу выполнения операции сколько чисел было обращено? (не залезая с подсчётами в сам контейнер ... считаем что он недоступен ... или его элементы имеют весьма сложную структуру чтобы её ковырять).