Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
 Аватар для LazySlacker
93 / 77 / 31
Регистрация: 29.08.2017
Сообщений: 188

C++ в функциональном стиле: как писать в стиле C#/LINQ (без дополнительных библиотек)?

22.09.2017, 13:26. Показов 5146. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как писать в стиле C#/LINQ (без дополнительных библиотек)? Вот, допустим, есть простейшая задача: ввести число n, ввести n групп чисел, в каждой группе выбрать минимальное и вывести результат одной строкой. Например:

Code
1
2
3
4
5
6
7
8
data:
3
7 3 5
15 20 40
300 550 137
 
answer:
3 15 137
Вот мой код на C++ (уверен, далеко не идеальный):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <sstream>
 
using namespace std;
 
int main()
{
    int n;
    cin >> n;
    ostringstream s;
    while (n-- > 0)
    {
        int a, b, c;
        cin >> a >> b >> c;
        if (b > c) b = c;
        if (a > b) a = b;
        s << a << " ";
    }
    cout << s.str() << endl;
    return 0;
}
А вот как я написал бы на божественном сишарпике:

C#
1
2
3
4
5
6
7
8
9
10
using System;
using System.Linq;
 
class Program
{
    public static void Main()
    {
        Console.WriteLine(String.Join(" ", Enumerable.Range(0, Int32.Parse(Console.ReadLine())).Select(_ => Console.ReadLine().Split().Select(s => Tuple.Create(Int32.Parse(s), s)).Min().Item2)));
    }
}
Как написать на C++ пусть не точный аналог (это бессмысленно, языки разные, идиомы разные и т.п.), но в похожем стиле?
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2017, 13:26
Ответы с готовыми решениями:

Как написать правильно (в функциональном стиле)
val in = new Scanner(System.in) val s = in.nextLine() var arr=new Array(s.length()+5) arr(0)=0 for{i&lt;-1 to...

Программа, объединяющая множества, в функциональном стиле
Добрый вечер! Требуется переделать программу, объединяющую два множества l1 и l2, в функциональный стиль (set 'y '(2 3 4)) (defun conc...

Разработать рекурсивный вариант программы в функциональном стиле
1) Разработать рекурсивный вариант программы в функциональном стиле для решения предложенной задачи. Формировать список, состоящий из...

43
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
22.09.2017, 20:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от LazySlacker Посмотреть сообщение
У Вас монитор с ограничением на 80 символов в строке
код приведенный GbaLog-, хоть читабелен, я не смог на 27 дюймовом монике прочитать ваш
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
22.09.2017, 20:47
Цитата Сообщение от LazySlacker Посмотреть сообщение
Как писать в стиле C#/LINQ (без дополнительных библиотек)?
Никак или написать требуемое самостоятельно. Но в чем проблема использовать дополнительные библиотеки?
Можете посмотреть на FunctionalPlus , не LINQ но есть довольно много возможностей.
0
 Аватар для LazySlacker
93 / 77 / 31
Регистрация: 29.08.2017
Сообщений: 188
22.09.2017, 20:48  [ТС]
дел
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
22.09.2017, 20:56
Цитата Сообщение от LazySlacker Посмотреть сообщение
Нет, суть совершенно не в этом.
а в чем тогда?

Цитата Сообщение от pav1uxa Посмотреть сообщение
Вся суть в том, что этот LINQ только для таких простейших задач и используется. Попробуйте написать реальное приложение, с обработкой больших объемов данных - получите минус 1000% к производительности.
ну дык не только линк в производительности проигрывает но и вообще функциональщина - плата за имутабельность вообще то но во многих случаях оно того стоит в скриптах особенно

Цитата Сообщение от _stanislav Посмотреть сообщение
глядя на твою строку кода тяжело понять логическую цепочку операций.
угу пайпов не хватает

Добавлено через 2 минуты
Цитата Сообщение от S_el Посмотреть сообщение
Никак или написать требуемое самостоятельно. Но в чем проблема использовать дополнительные библиотеки?
Можете посмотреть на FunctionalPlus , не LINQ но есть довольно много возможностей.
круть а еще есть линк для крестов

https://github.com/mrange/cpplinq

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "cpplinq.hpp"
 
int computes_a_sum ()
{
    using namespace cpplinq;    
    int ints[] = {3,1,4,1,5,9,2,6,5,4};
 
    // Computes the sum of all even numbers in the sequence above
    return 
            from_array (ints)
        >>  where ([](int i) {return i%2 ==0;})     // Keep only even numbers
        >>  sum ()                                  // Sum remaining numbers
        ;
}
зачетная тема

Добавлено через 1 минуту
Цитата Сообщение от obivan Посмотреть сообщение
код приведенный GbaLog-, хоть читабелен, я не смог на 27 дюймовом монике прочитать ваш
есть же скролл))
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
22.09.2017, 20:56
Цитата Сообщение от LazySlacker Посмотреть сообщение
Прочтите внимательно ТЗ.
прочёл, ничего о том, что группы должны располагаться на отдельных строках, не увидел.
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
22.09.2017, 20:57
Цитата Сообщение от GbaLog- Посмотреть сообщение
прочёл, ничего о том, что группы должны располагаться на отдельных строках не увидел.
вы код читайте а не ТЗ)) там одно число вводится а не кучка
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
22.09.2017, 21:01
Цитата Сообщение от FateOri Посмотреть сообщение
круть а еще есть линк для крестов
есть и другие библиотеки, тот же Range который никак в стандарт не втащат.
0
 Аватар для LazySlacker
93 / 77 / 31
Регистрация: 29.08.2017
Сообщений: 188
22.09.2017, 21:03  [ТС]
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
результат не заставил себя ждать
Тема скатилась в школоло-картинки, так что продолжать разговор я не вижу смысла.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
22.09.2017, 21:03
Цитата Сообщение от FateOri Посмотреть сообщение
есть же скролл)
мотать код скроллом в одной строке - зря терять время. Может C#-ры или джависты к этому привыкли, но у плюсовиков принято уважать свое и чужое время.
2
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
22.09.2017, 21:06
Цитата Сообщение от S_el Посмотреть сообщение
есть и другие библиотеки, тот же Range который никак в стандарт не втащат.
сырец не? версия еще только 0.3

Добавлено через 2 минуты
Цитата Сообщение от S_el Посмотреть сообщение
мотать код скроллом в одной строке - зря терять время. Может C# или джависты к этому привыкли, но у плюсовиков принято уважать свое и чужое время.
ой ой крестоносцы кипиш подняли подумаешь в одну строку код запостили сразу неуважение нашли
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
22.09.2017, 21:10
Цитата Сообщение от FateOri Посмотреть сообщение
й ой крестоносцы кипиш подняли
да причем тут 1 строка, дело не в этом зачем пытатся тыкать тем чего нет, ну все мы знаем что стл не так хорош по сравнению с другими стандартными либами, но у плюсов сам языки шаре чем другие да и перфоманс + читабельность у такого куска плоховата, я же написал пример
Цитата Сообщение от obivan Посмотреть сообщение
вы лучше мне на кастрированых дженериках покажете как сделать вычисления в компайл тайме
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
22.09.2017, 21:14
Цитата Сообщение от obivan Посмотреть сообщение
да причем тут 1 строка, дело не в этом зачем пытатся тыкать тем чего нет, ну все мы знаем что стл не так хорош по сравнению с другими стандартными либами, но у плюсов сам языки шаре чем другие да и перфоманс + читабельность у такого куска плоховата
а кто тыкает? автор топика учит кресты после шарпов нормальную тему поднял вон сколько полезнх ссылок накидали

Цитата Сообщение от obivan Посмотреть сообщение
вы лучше мне на кастрированых дженериках покажете как сделать вычисления в компайл тайме
дженерики не шаблоны эт все знают)) давайте тему не превращать в холивар кресты против шарпов))
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
22.09.2017, 21:15
Цитата Сообщение от FateOri Посмотреть сообщение
сырец не? версия еще только 0.3
0.3 - версия библиотеки, а стандарт не регламентирует способы реализации требуемого(возможно, за редкими исключениями).
Если вам действительно интересно - читайте собственно пропозал, там все написано.
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
22.09.2017, 21:17
Цитата Сообщение от S_el Посмотреть сообщение
0.3 - версия библиотеки, а стандарт не регламентирует способы реализации требуемого(возможно, за редкими исключениями).
я об этом и говорил))

Цитата Сообщение от S_el Посмотреть сообщение
Если вам действительно интересно - читайте собственно пропозал, там все написано.
я не осилю)) а вы что реально его читали?))
0
22.09.2017, 21:31

Не по теме:

Цитата Сообщение от FateOri Посмотреть сообщение
я не осилю)) а вы что реально его читали?))
читал, если хотите обсудить подробнее - создайте тему.

2
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
22.09.2017, 21:46
Цитата Сообщение от obivan Посмотреть сообщение
ну все мы знаем что стл не так хорош по сравнению с другими стандартными либами
нет, я не знаю, расскажите?

кстати, а что, есть ещё какие то другие?
и да, "стандартной библиотеки по прозвищу STL" не существует.
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
22.09.2017, 22:05
Цитата Сообщение от hoggy Посмотреть сообщение
кстати, а что, есть ещё какие то другие?
тут речь идет о возможностях что доступны по стандарту в других языках))
0
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
22.09.2017, 22:31
Цитата Сообщение от FateOri Посмотреть сообщение
тут речь идет о возможностях что доступны по стандарту в других языках))
Когда Java будем с C++ в этой ветке сравнивать?))

Кстати о красивости, это ******
Цитата Сообщение от LazySlacker Посмотреть сообщение
C#
1
Console.WriteLine(String.Join(" ", Enumerable.Range(0, Int32.Parse(Console.ReadLine())).Select(_ => Console.ReadLine().Split().Select(s => Tuple.Create(Int32.Parse(s), s)).Min().Item2)));
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
22.09.2017, 23:42
Цитата Сообщение от FateOri Посмотреть сообщение
тут речь идет о возможностях что доступны по стандарту в других языках))
стандарт предоставляет вам все необходимые возможности,
для реализации вот такого "функционального стиля".
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
23.09.2017, 02:55
Цитата Сообщение от LazySlacker Посмотреть сообщение
А вот как я написал бы на божественном сишарпике:
Смешно Давайте вы перепишите это код на Haskell (раз уж вы дальше упоминаете Haskell, то наверное владеете им настолько, чтобы решить такую элементарную задачу) и сравните по читаемости с шарпом? Ну или хотя бы на F#? Кстати, зачем нужен C#, если есть F#, не напомните?

Цитата Сообщение от LazySlacker Посмотреть сообщение
Такую оптимизацию выполнить вручную практически нереально, а функционально-ориентированные языки это делают автоматически (например, редукция графов в Хаскелле). Если делать такое на С++, то потребуется несколько лет работы (в процессе которой половина программистов сопьется, сойдет с ума, совершит самоубийство или сбежит), а в результате получится кишащее утечками памяти и гейзенбагами жалкое подобие того, что на C# пишется за несколько недель, на Лиспе - за несколько дней, а на Хаскелле - за несколько часов.
У меня в компании шарписты, которых я знаю, нормально относятся к плюсам, и выбирают язык по задаче, то шарпы, то плюсы. Потому что далеко не все задачи на шарпе удобнее решать. Вообще странно, что такие прописные истины приходится озвучивать.
А что вы написали на Haskell или Lisp, где благодаря "макрооптимизациям" по производительности обошли C++?
Видимо абсолютно ничего, иначе как минимум знали бы (а это фундамент), что в Haskell'е с памятью далеко не все гладко https://wiki.haskell.org/Memory_leak

PS
Вообще забавно, такое ощущение складывается, что ТС только недавно узнал о существовании функциональной парадигмы
Код в первом посте трудночитаем, хочется взять и послать автора пописать на Go для профилактики

Добавлено через 15 минут
Ну вот, попили пивка... Начать карьеру программиста в 38 лет
У меня было настроение похоливарить, но уже не вижу смысла, потому что я так понял, опыта промышленной разработки у ТС нету
4
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.09.2017, 02:55

Вывести все простые числа до n, в функциональном стиле
Никак не получается решить задачу в функциональном стиле (запрет на if, for, while) т.е только с помощью map, filter, all, any, lambda. Не...

Как распаковать файл ASP скриптом без дополнительных компонентов.библиотек
Проблему пытался решить следующим кодом: Dim exec var exec=new ActiveXObject('WScript.Shell'); var exec=shell.Run('pkunzip.exe...

GUI С++ в eclipse без дополнительных библиотек
Всем доброго времени суток и всех с наступающим НГ! Подскажите какую-нибудь библиотеку для работы с GUI для среды eclipse (под компилятор...

Отправка GET запроса без установки дополнительных библиотек
Подскажите простенький пример отправки GET запроса к примеру сюда cyberforum.ru/index.php без установки дополнительных библиотек вроде...

Определить длительность видео/аудио файла без использования дополнительных библиотек
Здравствуйте, уважаемые гуру. Без лишних слов вопрос: как узнать длительность видео и аудио файла? Желательно без подключения лишних...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru