Russian Qt Forum
Ноябрь 23, 2024, 12:13
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Итераторы
Страниц:
1
...
6
7
[
8
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Итераторы (Прочитано 47520 раз)
Akon
Гость
Re: Итераторы
«
Ответ #105 :
Апрель 22, 2013, 14:28 »
Цитировать
Ах как удобно повторять написанное в книжке Не спорю, концептуально это красиво. Но давайте копнем чуть глубже на том же живом примере. Вот выше утверждалось что с copy_if код пригоден как для вектора, так и для списка. Возможно "работать будет" - но вот делать будет совсем не то что нужно. Чего же мы перемещаем все элементы списка при удалении некоторых? Зачем тогда список если адреса элементов уплывают? Грамотно удалять из списка его методом remove_if или erase в цикле. Но ни то ни другое не обобщается на линейные контейнеры как вектор. Вот и закончилась "концептуальная красота/общность"
Полагаете, STL столько существует ради концептуальной красоты?
Вот вы ставите под сомнение некоторые фундаментальные вещи, только потому, что они, возможно, плохо подходят для решения ваших частных задач... А вот у меня задача - отсортировать контейнер. Как я по-вашему должен ее решить? А вот у меня есть некий компоновщик (паттерн), и мне нужно обойти всех парентов, начиная с текущего элемента и заканчивая топовым (т.е. имеем контейнер в виде дерева и нужно дойти до корня). Как я по-вашему должен ее решить? А если я захочу закэшировать результат обхода в линейном контейнере? Это мои реальные задачи, столь же "глубокие", как и ваши.
Записан
alex312
Хакер
Offline
Сообщений: 606
Re: Итераторы
«
Ответ #106 :
Апрель 22, 2013, 14:43 »
Цитата: Igors от Апрель 22, 2013, 12:04
Но и в этом случае я не вижу необходимости хоть каких-то функторов/лямбд и.т.п. Почему бы не решить простейшими базовыми средствами языка?
Because We can \o/
А если серьезно, то и лямбды и функторы - это базовые средства языка (может уже и не простейшие, но и не сложные).
Основной их плюс в том что их можно объявить локально максимально близко к месту использования.
Цитата: Igors от Апрель 22, 2013, 12:04
И очевидное удаление элементов из массива - можно размазывать сопли с remove_if (copy_if) а лучше простым и ясным for
Еще раз про сопли - в вашем коде
5
циклов, в моем 1.
Цитата: Igors
Но давайте копнем чуть глубже на том же живом примере. Вот выше утверждалось что с copy_if код пригоден как для вектора, так и для списка. Возможно "работать будет" - но вот делать будет совсем не то что нужно.
А давайте вы немного подумаете, и все таки попытаетесь понять что мир программирования не ограничивается Вашими задачами. Я веду разработку под 4 платформы одновременно (PC-Win7, PC-Ubuntu, Cortex-A-Linux, STM32F4/F1). Многие функции у них пересекаются. У меня есть довольно большие куски кода которые работают на каждой из платформ. Поэтому я вам говорю : оптимально - это не всегда быстро.
«
Последнее редактирование: Апрель 22, 2013, 14:45 от alex312
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Итераторы
«
Ответ #107 :
Апрель 23, 2013, 07:16 »
По поводу "моих" задач - да бог с Вами, разве это "задача"? Это чисто техническая вещь которая может возникнуть в любой предметной области, хоть в том же Model-View которое (почему-то) использует индексы
Цитата: alex312 от Апрель 22, 2013, 14:43
А если серьезно, то и лямбды и функторы - это базовые средства языка (может уже и не простейшие, но и не сложные).
Основной их плюс в том что их можно объявить локально максимально близко к месту использования.
...
Еще раз про сопли - в вашем коде
5
циклов, в моем 1.
И что, это уже круто? Если std::transform, copy_if и.т.п.- это уже не цикл, а "лучше". А мне кажется это просто снобизм/фетишизм. Я испытываю теплые чувства к лямбде со времен AutoLisp, задолго до ее появления здесь. Но надо знать меру. Обратите внимание что обычно стоит в теле лямбды - что-то однострочное. Тогда действительно выходит компактно/красиво. А у Вас? Увидев Ваши transform/copy_if я еще ничего не могу понять - мне надо найти функтор. Это мудрено, надо учесть std::bind и std::placeholder что Вы накрутили. Ладно, наконец прорвался, но имя отсутствует (безликий оператор ()) что он делает - хз. Ваш код прямо-таки кричит "смотрите как много я знаю", но разбираться с ним никто не захочет (включая тех кто здесь с Вами согласен).
Я считаю нужно делать не так. Надо выделить ф-цию несущую основную смысловую нагрузку, дать ей хорошее имя, возможно добавить строку примечаний. Человек работающий с кодом разберется в ней (обычно достаточно имени/примечания, в тело вникать необязательно) а дальше просто будет ориентироваться на вызовы. То есть наоборот, подчеркнуть "сильную долю", а не всячески прятать ее в глубине функторов и лямбд.
Цитата: alex312 от Апрель 22, 2013, 14:43
Еще раз ...
А давайте вы немного подумаете, и все таки попытаетесь понять что
Есть предложение спокойнее относиться к другим точкам зрения
Записан
alex312
Хакер
Offline
Сообщений: 606
Re: Итераторы
«
Ответ #108 :
Апрель 23, 2013, 10:07 »
Цитата: Igors от Апрель 23, 2013, 07:16
И что, это уже круто?
Это не круто - это нормально, обыденно.
Цитата: Igors от Апрель 23, 2013, 07:16
Если std::transform, copy_if и.т.п.- это уже не цикл, а "лучше". А мне кажется это просто снобизм/фетишизм.
Циклы в std::transform, copy_if писали люди поумнее меня, эти циклы стандартизированы, документированы, оттестированы миллионами, используются миллионами - и исходя из вышеперечисленного, да эти циклы лучше.
Цитата: Igors от Апрель 23, 2013, 07:16
Ваш код прямо-таки кричит "смотрите как много я знаю".
Поэтому я пишу на C++, и не использую паскаль
Цитата: Igors от Апрель 23, 2013, 07:16
Есть предложение спокойнее относиться к другим точкам зрения
Поддерживаю.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Итераторы
«
Ответ #109 :
Апрель 23, 2013, 16:46 »
Цитата: alex312 от Апрель 23, 2013, 10:07
Циклы в std::transform, copy_if писали люди поумнее меня,
"Слепая вера" (типа да примем без доказательств) конечно делает жизнь проще/практичнее - но в то же время IMO ущемляет программиста (кирпича-то нет, просто поверил)
Записан
Страниц:
1
...
6
7
[
8
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...