Russian Qt Forum
Ноябрь 22, 2024, 04:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3 4   Вниз
  Печать  
Автор Тема: Compile-time определение реверсивности итератора (reverse_iterator)  (Прочитано 19291 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #15 : Апрель 15, 2021, 12:43 »

ИМХО один из лучших принципов разработки, которого придерживаются мастера - это пресловутый KISS.
Вы считаете, что мастера не используют итераторы? Улыбающийся
Итераторы - что может быть KISS-овей в C++? Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #16 : Апрель 15, 2021, 12:48 »

Вы считаете, что мастера не используют итераторы? Улыбающийся
Итераторы - что может быть 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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Апрель 15, 2021, 12:48 »

Под "high-end" я подразумевал мастерство разработчика, из которого автоматом вытекают гибкость и производительность (скорость выполнения кода). Если не вытекают - это антимастерство.
Ну вот хотя бы данная тема. Не вижу каким боком это вообще связано с производительностью. С гибкостью тоже не блеск, разве нельзя было без затей подать +/- 1 как аргумент, пусть в неск ф-ций? Народная примета: когда видишь "большую вумность" ищи "чему она посвящена"  Улыбающийся А возможность declval интересная, не спорю, но "не более того"

Насчет растраты интеллектуальных ресурсов - как уже сказал, это зависит от сегмента, в котором вы находитесь (т.е. от требований конкретного проекта).
Больше всего я люблю софт рендер, и была бы моя воля - только им бы и занимался. Но увы, так не выходит, приходится заниматься и анимацией и гребаным OpenGL, иногда и UI. Ну и в каком "сегменте" я нахожусь? Наверное этот термин  из того же ведра что и "бизнес-логика" Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #18 : Апрель 15, 2021, 12:54 »

О не, наоборот, итераторы это хорошо Улыбающийся Куда ж без них родимых...
Как куда? Взял QVector + индексы... Индексов хватит всем... Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #19 : Апрель 15, 2021, 13:02 »

Как куда? Взял 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 Offline

Сообщений: 3260


Просмотр профиля
« Ответ #20 : Апрель 15, 2021, 13:14 »

ИМХО один из лучших принципов разработки, которого придерживаются мастера - это пресловутый KISS.

а потом я вычищаю из кода такое

Код:
if (!hash.contains(key)) {
    hash.insert(key, 0);
}
hash[key]++;
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #21 : Апрель 15, 2021, 13:15 »

Хотя я больше люблю типа: for (auto& x: y)

Зачем вы себя так гробите? Улыбающийся

И дополню: больше всего страдает сам вумник. Ведь время и силы, затраченное на "достижение совершенства"  берутся из проекта/задачи, связь с которой знаток быстро теряет. А приобретенные обширные познания этого отнюдь не компенсируют.

Ничего этого не надо, если есть цикл с индексами. Вы потратили кучу времени и сил, а сколько бы циклов с индексами вы смогли бы написать, не потрать вы это время впустую, на приобритение познаний. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Апрель 15, 2021, 13:52 »

а потом я вычищаю из кода такое

Код:
if (!hash.contains(key)) {
    hash.insert(key, 0);
}
hash[key]++;
Не надо перегибать палку. Но если уж разговор о хеше, то замечу что совсем недавно обсуждали здесь с научным работником создание хеша "на лету". Не услышал ни одной мысли, хотя наши познания в "современном С++" несравнимы. Обильные знания не всегда помогают найти хорошее решение, а иногда и вредят.

 
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #23 : Апрель 15, 2021, 13:55 »

Обильные знания не всегда помогают найти хорошее решение, а иногда и вредят.
Знания они вообще вредные. Улыбающийся
Есть хорошая поговорка на этот счет: Меньше знаешь, крепче спишь. Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #24 : Апрель 15, 2021, 14:05 »


а потом я вычищаю из кода такое

Код:
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 Offline

Сообщений: 4350



Просмотр профиля
« Ответ #25 : Апрель 15, 2021, 14:14 »

Ну, джун писал, чо... Неэффективно! Надо таКЪ:

Код:
if (hash.contains(key)) 
    hash[key]++;
else
    hash.insert(key, 1);

Улыбающийся
Один поиск все равно лишний... Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #26 : Апрель 15, 2021, 14:37 »

Не надо перегибать палку.

Я не перегибаю, практика показывает, что люди, не знающие итераторов также не знают что operator[] возвращает ссылку (которую можно менять) или что такое explicit.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #27 : Апрель 15, 2021, 14:40 »


Один поиск все равно лишний... Улыбающийся

ну вообще это просто

Код:
hash[key]++;

но это уже надо знать про то что operator[] создает default-constructed T - это же не циклы с индексами писать, это справочники читать надо
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #28 : Апрель 15, 2021, 14:42 »

ну вообще это просто
Ну вообще, я это знаю, поэтому и написал про это Racheengel и предоставил возможность подумать. Улыбающийся
Записан
AkonResumed
Чайник
*
Offline Offline

Сообщений: 81


Просмотр профиля
« Ответ #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   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 23.