Russian Qt Forum
Март 28, 2024, 23:35
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Compile-time определение реверсивности итератора (reverse_iterator)
Страниц:
1
[
2
]
3
4
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Compile-time определение реверсивности итератора (reverse_iterator) (Прочитано 16126 раз)
Old
Джедай : наставник для всех
Offline
Сообщений: 4349
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #15 :
Апрель 15, 2021, 12:43 »
Цитата: Racheengel от Апрель 15, 2021, 12:38
ИМХО один из лучших принципов разработки, которого придерживаются мастера - это пресловутый KISS.
Вы считаете, что мастера не используют итераторы?
Итераторы - что может быть KISS-овей в C++?
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #16 :
Апрель 15, 2021, 12:48 »
Цитата: Old от Апрель 15, 2021, 12:43
Вы считаете, что мастера не используют итераторы?
Итераторы - что может быть KISS-овей в C++?
О не, наоборот, итераторы это хорошо
Куда ж без них родимых...
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #17 :
Апрель 15, 2021, 12:48 »
Цитата: AkonResumed от Апрель 15, 2021, 12:08
Под "high-end" я подразумевал мастерство разработчика, из которого автоматом вытекают гибкость и производительность (скорость выполнения кода). Если не вытекают - это антимастерство.
Ну вот хотя бы данная тема. Не вижу каким боком это вообще связано с производительностью. С гибкостью тоже не блеск, разве нельзя было без затей подать +/- 1 как аргумент, пусть в неск ф-ций? Народная примета: когда видишь "большую вумность" ищи "чему она посвящена"
А возможность declval интересная, не спорю, но "не более того"
Цитата: AkonResumed от Апрель 15, 2021, 12:08
Насчет растраты интеллектуальных ресурсов - как уже сказал, это зависит от сегмента, в котором вы находитесь (т.е. от требований конкретного проекта).
Больше всего я люблю софт рендер, и была бы моя воля - только им бы и занимался. Но увы, так не выходит, приходится заниматься и анимацией и гребаным OpenGL, иногда и UI. Ну и в каком "сегменте" я нахожусь? Наверное этот термин из того же ведра что и "бизнес-логика"
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4349
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #18 :
Апрель 15, 2021, 12:54 »
Цитата: Racheengel от Апрель 15, 2021, 12:48
О не, наоборот, итераторы это хорошо
Куда ж без них родимых...
Как куда? Взял QVector + индексы... Индексов хватит всем...
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #19 :
Апрель 15, 2021, 13:02 »
Цитата: Old от Апрель 15, 2021, 12:54
Как куда? Взял QVector + индексы... Индексов хватит всем...
Ну, индексы и итераторы - вещи не (всегда) взаимозаменяемые... Хотя я больше люблю типа: for (auto& x: y)
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #20 :
Апрель 15, 2021, 13:14 »
Цитата: Racheengel от Апрель 15, 2021, 12:38
ИМХО один из лучших принципов разработки, которого придерживаются мастера - это пресловутый KISS.
а потом я вычищаю из кода такое
Код:
if (!hash.contains(key)) {
hash.insert(key, 0);
}
hash[key]++;
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4349
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #21 :
Апрель 15, 2021, 13:15 »
Цитата: Racheengel от Апрель 15, 2021, 13:02
Хотя я больше люблю типа: for (auto& x: y)
Зачем вы себя так гробите?
Цитата: Igors от Апрель 15, 2021, 10:12
И дополню: больше всего страдает сам вумник. Ведь время и силы, затраченное на "достижение совершенства" берутся из проекта/задачи, связь с которой знаток быстро теряет. А приобретенные обширные познания этого отнюдь не компенсируют.
Ничего этого не надо, если есть цикл с индексами. Вы потратили кучу времени и сил, а сколько бы циклов с индексами вы смогли бы написать, не потрать вы это время впустую, на приобритение познаний.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #22 :
Апрель 15, 2021, 13:52 »
Цитата: Авварон от Апрель 15, 2021, 13:14
а потом я вычищаю из кода такое
Код:
if (!hash.contains(key)) {
hash.insert(key, 0);
}
hash[key]++;
Не надо перегибать палку. Но если уж разговор о хеше, то замечу что совсем недавно обсуждали здесь с научным работником создание хеша "на лету". Не услышал ни одной мысли, хотя наши познания в "современном С++" несравнимы. Обильные знания не всегда помогают найти хорошее решение, а иногда и вредят.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4349
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #23 :
Апрель 15, 2021, 13:55 »
Цитата: Igors от Апрель 15, 2021, 13:52
Обильные знания не всегда помогают найти хорошее решение, а иногда и вредят.
Знания они вообще вредные.
Есть хорошая поговорка на этот счет: Меньше знаешь, крепче спишь.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #24 :
Апрель 15, 2021, 14:05 »
Цитата: Авварон от Апрель 15, 2021, 13:14
а потом я вычищаю из кода такое
Код:
if (!hash.contains(key)) {
hash.insert(key, 0);
}
hash[key]++;
Ну, джун писал, чо... Неэффективно! Надо таКЪ:
Код:
if (hash.contains(key))
hash[key]++;
else
hash.insert(key, 1);
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Old
Джедай : наставник для всех
Offline
Сообщений: 4349
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #25 :
Апрель 15, 2021, 14:14 »
Цитата: Racheengel от Апрель 15, 2021, 14:05
Ну, джун писал, чо... Неэффективно! Надо таКЪ:
Код:
if (hash.contains(key))
hash[key]++;
else
hash.insert(key, 1);
Один поиск все равно лишний...
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #26 :
Апрель 15, 2021, 14:37 »
Цитата: Igors от Апрель 15, 2021, 13:52
Не надо перегибать палку.
Я не перегибаю, практика показывает, что люди, не знающие итераторов также не знают что operator[] возвращает ссылку (которую можно менять) или что такое explicit.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #27 :
Апрель 15, 2021, 14:40 »
Цитата: Old от Апрель 15, 2021, 14:14
Один поиск все равно лишний...
ну вообще это просто
Код:
hash[key]++;
но это уже надо знать про то что operator[] создает default-constructed T - это же не циклы с индексами писать, это справочники читать надо
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4349
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #28 :
Апрель 15, 2021, 14:42 »
Цитата: Авварон от Апрель 15, 2021, 14:40
ну вообще это просто
Ну вообще, я это знаю, поэтому и написал про это Racheengel и предоставил возможность подумать.
Записан
AkonResumed
Чайник
Offline
Сообщений: 81
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #29 :
Апрель 15, 2021, 14:49 »
Друзья, все по-своему правы (зависит от контекста). Пожалуй, чтобы лучше "прочувствовать" приведу здесь саму задачу, решая которую и создал этот топик. Это типовая задача, в которой есть связь типа и константы.
Итак, задача: есть диапазон дат (QDate), задаваемый парой итераторов [begin, end). Даты идут с шагом в 7-дней. Необходимо сдвинуть диапазон влево или вправо на любое заданное число элементов, при этом новые даты должны продолжать последовательность.
Например, [2021-04-8, 2021-04-15, 2021-04-22] после сдвига влево на 2 станет [2021-04-22, 2021-04-29, 2021-05-06], а после сдвига на 4 - [2021-05-06, 2021-05-13, 2021-05-20].
Это отдаленно похоже на std::shift_left, std::shift_right из C++20, но мы ограничены C++17.
Допустимо сделать две функции shift_left и shift_right, а можно обойтись и одной shift, в которой направление сдвига задается типом итераторов (прямой - влево, обратный - вправо) или знаком смещения ('+' - влево, '-' - вправо). Это на ваш выбор.
Например, если направление сдвига задаем типом итератора (соот-но, будет беззнаковое смещение), то прототип такой:
Код:
template <typename IteratorT>
void shift(IteratorT begin, IteratorT end, typename std::iterator_traits<IteratorT>::difference_type offset)
Если мысленно представите или набросаете решение, при этом стремясь к элегантности, которая в данном случае даст гибкость, производительность, включение универсальности ... и будет мало букв в коде, то поймете мой изначальный вопрос.
Записан
Страниц:
1
[
2
]
3
4
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...