Обсуждение решения учебной задачи на C++ (с лямбдами и auto-переменными)

По теме: ваше решение врядли подойдет ТС, ибо подразумевается алгоритмическое решение задачи (нахождение минимума и максимума)

Это я писал, применительно конкретно к этой ситуации, о чем, опять же, упомянул:

Это может быть правильным подходом при решении практических задач, но...

Очень странно, что ты воспринимаешь это как абсолютное утверждение, применимое в принципе к программированию на плюсах.

И еще раз, чтобы Вы усвоили, наконец-то. Писал я это НЕ ДЛЯ ВАС И НЕ ДЛЯ ПРЕПОДА,

Цель форума — помочь вопрошающим людям решить их проблему. Если твое решение с вероятностью 90% не поможет вопрошающему, то его можно считать неудачным (в данном конкретном случае).

И да, я совершенно не против использования всех возможностей языка. Просто это не тот случай.

Это я писал, применительно конкретно к этой ситуации
Просто это не тот случай.

При этом точного ответа от ТС мы не получили до сих пор.

Если твое решение с вероятностью 90% не поможет вопрошающему, то его можно считать неудачным (в данном конкретном случае).

Не поможет этому вопрошающиму, поможет кому-то,
пришедшему из гугла после.
Вариантов должно быть больше.

Цель форума — помочь вопрошающим людям решить их проблему.

Помочь != решить_за_меня.
Соответственно, если я решаю,
то для себя, а не для ТС.

При этом точного ответа от ТС мы не получили до сих пор.

Это не имеет прямого отношения к сути дискуссии. А именно — применимо ли использовать любые возможности языка C++ и его стандартной библиотеки в учебных задачах.

Не поможет этому вопрошающиму, поможет кому-то, пришедшему из гугла после.

Вполне возможно. А может и ТС-у поможет. Но опять же, целевая аудитория, приходящая на форум из гугла — в основном, студенты.
Тем не менее, это никак не умаляет актуальность моего комментария, после которого разгорелась эта дискуссия.

Помочь != решить_за_меня.
Соответственно, если я решаю,
то для себя, а не для ТС.

Понятие «решить за меня» является частным случаем понятия «помочь». В данном случае, ты предоставил готовое решение. Логично (почему логично — писал в предыдущем посте), что оно должно в достаточной мере разрешать проблему ТС.

В данном случае, ты предоставил готовое решение.

а ТЫ, кроме воплей «НИ ТАК НАДА», ничего не предоставил.

И да, тоже, вроде, тебя не ч.... ну, ты понял.

что оно должно в достаточной мере разрешать проблему ТС.

Оно решает, но кто-то просто любит ныть.
И, кстати, мой код никому ничего не должен.

А именно — применимо ли использовать любые возможности языка C++ и его стандартной библиотеки в учебных задачах.

Ответ — применимо. Применимо ли для студентов? Да.
И этому есть реальные примеры.
Применимо ли конкретно для этого студента?
Понятия не имею, он всё равно слился.

Применимо ли для selevit и Cranium?
Видимо, нет, но они не все и не нужно говорить за всех,
однако они всё равно только со своей колокольни...

Для примера мой знакомый учится в ВУЗ'е.
На первом курсе у них был C++.
Они во всю изучали как C'шное наследие,
так и новшества C++, вместе с его стандартной библиотекой.
Мало того, изучались новые возможности C++11.
Препод — практикующий программист со стажем.

Так что трендеть что все они дебилы, и
всем только C-style подавай не нужно.

а ТЫ, кроме воплей «НИ ТАК НАДА», ничего не предоставил.

Опять же, это не имеет прямого отношения к теме обсуждения. Я всего лишь написал аннотацию, чтобы твое решение использовали с осторожностью.

И да, тоже, вроде, тебя не ч.... ну, ты понял.

Нет, не понял. Тебя опять беспокоят множественные притяжательные?

Оно решает, но кто-то просто любит ныть.

Решает, но не в полной мере. Почему — смотри еще раз мой комментарий про 90%.

И, кстати, мой код никому ничего не должен.

Код сам по себе конечно же не должен. Это утверждение относится к его автору. См. «страдательный залог». Если тебя коробит слово «должен», замени на «следовало бы».

Ответ — применимо. Применимо ли для студентов? Да.

Си с классами изучают не просто так, а по причине того, что такой подход позволяет студентам освоить работу с памятью и прочие низкоуровневые вещи, а также понять базовые принципы ООП.
Насколько этот подход верный — не могу сказать. Возможно, более правильное решение — сначала учить C, а с принципами ООП знакомиться на примере какого-либо другого языка.

Использовать полный диалект плюсов для обучения студентов программированию (а не конкретному языку) — идея не самая лучшая, потому что плюсы не знает на 100% даже их создатель (по его собственному признанию). Ни к чему забивать голову начинающего студента таким большим количеством информации на этапе начального обучения программированию. По этой же причине, на начальном этапе, людей не нагружают программированием графических интерфейсов.

Изучать полный диалект плюсов на более старших курсах (уже на более прикладном уровне) — вполне допустимо, но это явно не тот случай по причине тривиальности самой задачи.

Применимо ли для selevit и Cranium?
Видимо, нет, но они не все и не нужно говорить за всех,
однако они всё равно только со своей колокольни...

Ты сливаешься в позицию «у каждого свое мнение», не подкрепляя это мнение конструктивной аргументацией. Примеры из твоей жизни не имеют никакого отношения к объективной реальности.
Давай пожалуйста вести дискуссию цивилизованно, а не ссылаться на абстрактный эмпирический опыт твоего друга и его преподавателя. Я же не подкрепляю свою позицию тем, что в тысячах ВУЗов изучают Си с классами.

Решает, но не в полной мере. Почему — смотри еще раз мой комментарий про 90%.

То есть если решение подходит 10%,
они всё равно должны делать по другому?
Какую-то хрень Вы молотите, уважаемый.
Код решает задачу, а не проблему ТС,
его преподавателя или вашу.

Нет, не понял.

Полная фраза звучит как-то так —
"мы с вами на брудершафт не пили,
чтобы вы мне здесь тыкали."

Если тебя коробит слово «должен», замени на «следовало бы».

Что мне следует делать и как я решу сам.
А что касается должен — не должен.

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

Подход сверху-вниз делает тоже самое,
но на более поздних этапах.
Для использования смартфона не нужно знать как оно устроено.
Кстати, это же относится и к ООП —
внутренняя реализация скрыта,
важен лишь интерфейс и правила пользования,
которые можно быстро освоить и начать использовать.
А уже потом, можно посмотреть что там внутри.

Насколько этот подход верный — не могу сказать.

Почему не верный? Просто он не единственный.
А вы пытаетесь его выставить
как единственный правильный подход к обучению,
собственно, из-за этого весь сыр бор.

Ни к чему забивать голову начинающего студента таким большим количеством информации на этапе начального обучения программированию.

Это же можно отнести и к C-стилю.
Когда пишешь в C-стиле,
держать в голове приходится намного больше,
и в придачу к сложной задаче мы еще получаем
все «бонусы» от ручного управления байтиками.

По этой же причине, на начальном этапе, людей не нагружают программированием графических интерфейсов.

Вот именно. Это отвлекает от задачи.
Вместо решения задачи и работе с сущностями
мы вынуждены следить за тем,
как там у нас байтики лежат
и как бы ничего не забыть.
А что касается наших ВУЗ'ов,
то частенько там преподают ахинею,
которая приводит к тому, что у студента
в коде одни UB и ни черта не работает.

идея не самая лучшая, потому что плюсы не знает на 100% даже их создатель

Он Вам об этом лично сказал?

Изучать полный диалект плюсов на более старших курсах (уже на более прикладном уровне)

Ну вот у меня знакомый сейчас как раз
на старших курсах и уже работает.
Не вижу, чтобы ему мешали возможности C++,
которые ему дали на первом курсе.

Примеры из твоей жизни не имеют никакого отношения к объективной реальности.

Еще как имеют. Ваши ответы основаны на том,
что мол ТС'у нужно другое.
Я же говорю — мне плевать на то, что нужно ТС.
У меня свой интерес и я ему ничего не должен.
Не нравится, не используй.
И да, у меня был падаван,
сейчас он работает в Европе,
обучение было как раз сверху-вниз.
В результате, пока в ВУЗ'ах гоняются за '\0',
остальные уже пишут софт и зарабатывают.
При этом они прекрасно знают про '\0',
но бегать за ним им уже не нужно.

Ты сливаешься в позицию «у каждого свое мнение», не подкрепляя ее конструктивной аргументацией.

1) Я не сливаюсь, я с самого начала в этой позиции.
2) А это нужно подкреплять? То есть по-вашему у всех должно быть одинаковое мнение? Чё-т хрень какая-то получается. Вы мне пытаетесь навязать свое мнение, а я говорю вам, что оно не единственно верное.
У Вас какое-то консервативное мышление. Нас так учили, значит нужно всех так учить. Собственно, это одна из причин, по которой во многих ВУЗ'ах до сих пор преподают на диалектах из 80-ых. Ничего не знают о новшествах C++. В результате студенты не конкурентоспособны после ВУЗ'а.

Я же не подкрепляю свою позицию тем, что в тысячах ВУЗов изучают Си с классами.

И потом такое вот чудо не может разобраться в софте на C++,
потому что там всё усеяно шаблонами, библиотеками и классами.

Я же не подкрепляю свою позицию тем, что в тысячах ВУЗов изучают Си с классами.

Как это нет? На этом же и
основана Ваша изначальная позиция —
преподу нада ни так, а вот так.

Давай пожалуйста вести дискуссию цивилизованно

А я предлагаю закончить (уже не первый раз, кстати).

Посмотрел тут вашу статью:

Массивы в C++ — урок 5

string students[10] = {
    бла-бла-бла
}

Это ж урок 5. Какой std::string?
Здесь должно же быть char**,
мы же ведь только начинаем,
и нам нужно знать внутреннее устройство.

То есть если решение подходит 10%,
они всё равно должны делать по другому?
Какую-то хрень Вы молотите, уважаемый.

Во первых, кто «они»? Во вторых, где ты видишь, что я писал о том, что ТС должен делать по другому? Я писал о том, что твое решение скорее всего не релевантно топику (что в принципе так и есть).

Код решает задачу, а не проблему ТС, его преподавателя или вашу.

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

мы с вами на брудершафт не пили, чтобы вы мне здесь тыкали.
Какую-то хрень Вы молотите, уважаемый.

Ты лучше бы уважительно общаться научился с людьми. Смотрится гораздо лучше, чем показательное выкание.

Что мне следует делать и как я решу сам.
А что касается должен — не должен.

Общение на форуме подразумевает публикацию конкретных вопросов и получение на эти вопросы полезных ответов. Если ты отвечаешь невпопад, то не стоит удивляться соответствующей реакции сообщества.

Подход сверху-вниз делает тоже самое,
но на более поздних этапах.

Академическое образование подразумевает изучение в первую очередь фундаментальных вещей, в последнюю — конкретных технологий.

А вы пытаетесь его выставить
как единственный правильный подход к обучению

Опять же, мы говорим об фундаментальном образовании, которое дают в университетах. Подход «Научиться делать сайты за 21 день» (утрировано) применим когда нужно быстро научиться чему-то полезному и как можно быстрее приступить к работе, попутно вникая в детали. К сожалению, у нас пока нет ПТУ для программистов, где бы готовили человека, который при выпуске сможет максимально быстро приступить к несложной работе.

Он Вам об этом лично сказал?

Нет, к сожалению, я не знаком с автором лично. По поводу оценки Страуструпом своего уровня C++ — это общеизвестная информация из одного из его интервью. К сожалению, не смог найти ссылку на первоисточник, поэтому не буду биться об заклад за достоверность этого высказывания с его стороны. Но вот тут, например, обсуждается этот вопрос, а также, почему такая ситуация вполне допустима даже для создателя языка.

Ну вот у меня знакомый сейчас как раз на старших курсах и уже работает.

Да причем тут твой знакомый? У меня знакомый работал прорабом на стройке, а теперь вот программирует (без шуток). Но это не имеет никакого отношения к дискуссии. И использовать подобную аргументацию на основе статистически незначимого опыта у нормальных людей считается моветоном.

Вы мне пытаетесь навязать свое мнение, а я говорю вам, что оно не единственно верное.

Это называется вести обсуждение какого-то вопроса.
У меня может быть мнение о том, что лучший способ похудеть — это больше жрать. Но это мнение ничего не стоит до тех пор, пока я его не аргументирую.

У Вас какое-то консервативное мышление. Нас так учили, значит нужно всех так учить. Собственно, это одна из причин, по которой во многих ВУЗ'ах до сих пор преподают на диалектах из 80-ых.

Вуз дает в первую очередь фундаментальное образование. В плане прикладного программирования сейчас действительно есть проблемы с его эффективностью. Но это не отменяет необходимости наличия фундаментальных знаний компьютерных наук у выпускника.

И потом такое вот чудо не может разобраться в софте на C++,

Нормальный здравомыслящий человек вполне способен освоить конкретную технологию, обладая базовым набором знаний. Тем, кто не в состоянии — в ПТУ, либо прикладной бакалавриат, чтобы научиться писать код и решать типовые задачи.

Я писал о том, что твое решение скорее всего не релевантно топику

Стоит задача. Она решена.
А подойдет ли решение ТС — решать не Вам, а ему.

Во вторых, где ты видишь

ТЫкалку можешь засунуть, как говорится...
Не надо мне тыкать, ты мне никто.

решение является не релевантным топику.

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

Ты лучше бы уважительно общаться научился с людьми. Смотрится гораздо лучше, чем показательное выкание.

Вот-вот, научились бы общаться,
а не тыкать незнакомым людям.
Даже несмотря на то, что это форум,
надо соблюдать какие-то правила,
если Вы их не соблюдаете,
то я посылаю Вас подальше, что я уже,
фактически, и сделал чуть выше, дабы
общаться с невежами я не особо люблю,
так что не обижайтесь за это.
Либо Вы относитесь уважительно,
либо я и правда буду считать Вас невежей.

Академическое образование подразумевает изучение в первую очередь фундаментальных вещей, в последнюю — конкретных технологий.

т.е. они должны вникать в физику
и электронику первым делом,
ведь это основы, не так ли?

Или у Вас курс физики начался в
школе с изучения термоядерных реакций?

А Вы говорить научились до того
как алфавит выучили или после?

А компьютером пользоваться начали только
после разбора принципов работы его технической части?

Что-то мне подсказывает, что всё это происходило иначе.
Так с чего бы и здесь не подойти также?
Вам предоставлены средства для решения задач — пользуйтесь.
Как там байты располагаются можете в любое время посмотреть.

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

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

Подход «Научиться делать сайты за 21 день» (утрировано) применим когда нужно быстро научиться чему-то полезному и как можно быстрее приступить к работе, попутно вникая в детали.

Нужно не попутно, а методично.
Наспех и попутно — будет фигово.

Нет, к сожалению, я не знаком с автором лично. По поводу оценки Страуструпом своего уровня C++ — это общеизвестная информация из одного из его интервью.

Мда... я как-то писал ему по поводу косяка в стандарте,
который, наверное, до сих пор там (надо будет посмотреть).
Но не думаю, что у него мало писем для чтения и без моего.
Надобно всё-таки в коммитет написать, но лень.

почему такая ситуация вполне допустима даже для создателя языка.

Такая ситуация допустима для любого человека.
Этот язык ужасно огромный по своему функционалу
и по наличию разнообразных нюансов.
Удержать всё в голове, наверное, не реально просто.
Иногда бывает так, что нахожу в стандарте что-то новое,
интересное, хотя такое уже редкость.

на основе статистически незначимого опыта

Я показал лишь реальные примеры из собственного опыта.
Результаты из книги (или её тоже писали лузеры?) есть выше,
или Вы так и не дочитали всё?

Это называется вести обсуждение какого-то вопроса.

Я Вам говорю — Ваша версия не единственная верная,
Вы мне говорите, что она единственная правильная.

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

И в какой части здесь обсуждение?

Но это мнение ничего не стоит до тех пор, пока я его не аргументирую.

Вы вообще читали что я выше писал?
Там выдержки из книг/опыта/экспериментов.
Так что пока именно Вы не привели ни одного аргумента,
кроме как «Наши ВУЗ'ы преподают вот так»,
причем методички во многих ВУЗ'ах лежат с 80-ых.
Да, да, я не шучу, есть еще те,
кто учит на Turbo-C++ под MS-DOS.
Это даже смешно смотрится.
И где потом нужен такой спец?
Максимум — поддержка старых софтин.

Но это не отменяет необходимости наличия фундаментальных знаний компьютерных наук у выпускника.

А где я писал, — «не надо знать фундамент»?
Я ж Вам говорю, — «Сначала пользуем, потом разбираем».

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

Также и здесь. Ну знаем мы как устроена структура данных «двусвязный список», знаем указатели и можем реализовать, но встает сразу два вопроса. Во-первых, что реализовывать?
Что должен поддерживать этот связный список?
Какой интерфейс у него должен быть?
А во-вторых, зачем нужны такие списки?
Где их применять? Да ну навиг всё это, не нужны они...
А при подходе сверху-вниз, дойдя до этого
же момента с реализацией двусвязного списка,
у Вас уже есть опыт в применении списка.
Вы знаете для чего он нужен,
знаете какие операции должны
быть оÐ