Russian Qt Forum
Март 29, 2024, 09:34
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Compile-time определение реверсивности итератора (reverse_iterator)
Страниц:
1
2
[
3
]
4
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Compile-time определение реверсивности итератора (reverse_iterator) (Прочитано 16127 раз)
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #30 :
Апрель 15, 2021, 15:14 »
Цитата: Авварон от Апрель 15, 2021, 14:40
Цитата: Old от Апрель 15, 2021, 14:14
Один поиск все равно лишний...
ну вообще это просто
Код:
hash[key]++;
но это уже надо знать про то что operator[] создает default-constructed T - это же не циклы с индексами писать, это справочники читать надо
Эт верно, но только если гарантируется, что для default-constructed T будет 0
А если нет - хм, возможен ведь и такой варинт...
Или же мы хотим не 0 по дефолту, а там 100 например?
Записан
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)
«
Ответ #31 :
Апрель 15, 2021, 15:22 »
Цитата: Авварон от Апрель 15, 2021, 14:37
Я не перегибаю, практика показывает, что люди, не знающие итераторов также не знают что operator[] возвращает ссылку (которую можно менять) или что такое explicit.
Я не сделаю такой ошибки, но не считаю что знаю итераторы. Как-то хотел написать итератор с нуля "по всем правилам", открыл справочник - ой мама, та ну его нафиг
Плохо не то что человек "много знает" (да на здоровье), а то что он (чрезмерно) увлечен поглощением знаний, и найти свое решение даже не пытается. Ну вот та задачка на хеш что я упоминал
Цитировать
- Есть контейнер нормированных QVector3D. Требуется макс быстро находить в нем все вектора с углом отклонения не больше заданного от вектора V (аргумент поиска). При этом кратность невелика, число поисков напр всего 200 (потом контейнер изменится)
Я хорошо знаю как это будет делать std-шник. Если думка об ускорении вообще возникнет в его голове, то будет сразу же отметена - ведь построение std::unordered_map явно дороже 200 переборов. И он с чистой совестью влепит перебор вроде std::find, вероятно с лямбдой и.т.п. В его понимании это нормально, т.к. find - штатная ф-ция. Хуже всего что у него нет и желания что-то придумать, ведь неуклонно овладевать все новыми и новыми знаниями куда легче, безопаснее и приятнее. А как же "high-end"? Да хз
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #32 :
Апрель 15, 2021, 15:23 »
Цитата: Racheengel от Апрель 15, 2021, 15:14
Эт верно, но только если гарантируется, что для default-constructed T будет 0
А если нет - хм, возможен ведь и такой варинт...
Или же мы хотим не 0 по дефолту, а там 100 например?
придется почитать букварь и выяснить что operator[] таки возвращает ссылку
Код:
int &value = hash[key];
if (value == 0)
value = 100;
else
value++;
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4349
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #33 :
Апрель 15, 2021, 15:31 »
Цитата: Igors от Апрель 15, 2021, 15:22
Я хорошо знаю как это будет делать std-шник.
...
Хуже всего что у него нет и желания что-то придумать, ведь неуклонно овладевать все новыми и новыми знаниями куда легче, безопаснее и приятнее.
Серьезно? Знаете? Как любой std-шник будет делать?
А скольких std-шников вы знаете? Вы правда уверены, что это все std-шники в программировании?
P.S. Чем меньше человек знает, тем масштабнее у него заявления...
«
Последнее редактирование: Апрель 15, 2021, 20:06 от Old
»
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #34 :
Апрель 15, 2021, 15:37 »
Цитата: Авварон от Апрель 15, 2021, 15:23
придется почитать букварь и выяснить что operator[] таки возвращает ссылку
Код:
int &value = hash[key];
if (value == 0)
value = 100;
else
value++;
Почти хорошо, т.к. *But for primitive types like int and double, as well as for pointer types, the C++ language doesn't specify any initialization; in those cases, Qt's containers automatically initialize the value to 0.
Но только если в хэше уже раньше был 0-й ключ, то он превратится в 100, а не в 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 не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #35 :
Апрель 15, 2021, 15:39 »
Цитата: AkonResumed от Апрель 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].
Ну а почему бы не перевести в нечто вроде "день эпохи", там спокойно отнять или прибавить недели, и потом обратно в даты?
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #36 :
Апрель 15, 2021, 15:53 »
Цитата: Racheengel от Апрель 15, 2021, 15:37
Почти хорошо, т.к. *But for primitive types like int and double, as well as for pointer types, the C++ language doesn't specify any initialization; in those cases, Qt's containers automatically initialize the value to 0.
Кутешные контейнеры тут ни при чем - если элемента нет, вставляется default-constructed value, что для int'а 0 по стандарту. default-constructed value != uninitialized variable. Но это же букварь читать надо, тонкости языка знать, это не циклы с индексами писать=)
Цитата: Racheengel от Апрель 15, 2021, 15:37
Но только если в хэше уже раньше был 0-й ключ, то он превратится в 100, а не в 1... Понимаю, что пошла уже софистика, но возможно "джун" был не совсем туп
Ну это действительно софистика, потому что исходный код считал с нуля но зачем-то делал 3 лукапа.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #37 :
Апрель 15, 2021, 15:53 »
Цитата: AkonResumed от Апрель 15, 2021, 14:49
Итак, задача: есть диапазон дат (QDate), задаваемый парой итераторов [begin, end). Даты идут с шагом в 7-дней. Необходимо сдвинуть диапазон влево или вправо на любое заданное число элементов, при этом новые даты должны продолжать последовательность.
я так понимаю, сдвиг на N - это "прибавить N недель к каждой дате"?
тогда (псевдокод):
Код:
void shift(IteratorT begin, IteratorT end, int offset)
{
for (auto& it = begin; it != end; it++)
{
*it = (*it).addDays(offset * 7);
}
}
это имелось в виду?
Записан
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 не волк, в лес не уйдёт
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #38 :
Апрель 15, 2021, 15:57 »
Цитата: Авварон от Апрель 15, 2021, 15:53
Кутешные контейнеры тут ни при чем - если элемента нет, вставляется default-constructed value, что для int'а 0 по стандарту. default-constructed value != uninitialized variable. Но это же букварь читать надо, тонкости языка знать, это не циклы с индексами писать=)
Дык это я как раз строчку с "букваря" (документации по QHash) взял. Там написано, что "по стандарту" int не обязан нулём инициализироваться, поэтому для хэша они это "сами заимплементировали".
Записан
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)
«
Ответ #39 :
Апрель 15, 2021, 16:11 »
Цитата: Racheengel от Апрель 15, 2021, 15:57
Дык это я как раз строчку с "букваря" (документации по QHash) взял. Там написано, что "по стандарту" int не обязан нулём инициализироваться, поэтому для хэша они это "сами заимплементировали".
Плиз "ткните носиком" где прочитали, не припомню ни одного контейнера который бы имел неинициализированные эл-ты. Ну разве QVarLengthArray, но там умышленно.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #40 :
Апрель 15, 2021, 16:14 »
Цитата: Racheengel от Апрель 15, 2021, 15:57
Дык это я как раз строчку с "букваря" (документации по QHash) взял. Там написано, что "по стандарту" int не обязан нулём инициализироваться, поэтому для хэша они это "сами заимплементировали".
Ну кутешные контейнеры пишут такие же специалисты как те которые в итераторах не могут разобраться=)
В Qt6 например QHash не обеспечивает стабильность ссылок при вставке что ломает тонну кода.
Вы читайте cppreference - там требование к T чтобы он был default-constructible для operator[]. Интересно, зачем надо default-constructible кроме как чтобы позвать T() (подсказка - int a; дефолт ктор
не
зовет)
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #41 :
Апрель 15, 2021, 16:14 »
Цитата: Igors от Апрель 15, 2021, 16:11
Плиз "ткните носиком" где прочитали, не припомню ни одного контейнера который бы имел неинициализированные эл-ты. Ну разве QVarLengthArray, но там умышленно.
Вздох.
std::vector::reserve ?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #42 :
Апрель 15, 2021, 16:27 »
Цитата: Авварон от Апрель 15, 2021, 16:14
Вздох.
std::vector::reserve ?
А это вовсе не эл-ты, а место для них (т.е. личное дело контейнера).
Цитата: Авварон от Апрель 15, 2021, 16:14
Ну кутешные контейнеры пишут такие же специалисты как те которые в итераторах не могут разобраться=)
В Qt6 например QHash не обеспечивает стабильность ссылок при вставке что ломает тонну кода.
Так всегда было, неперемещаемость только для erase, для вставок и remove "пионерский привет" (rehash)
Цитата: Авварон от Апрель 15, 2021, 16:14
Вы читайте cppreference - там требование к T чтобы он был default-constructible для
Не стоит так "хвост распускать"
, дойдет до дела (выше) - будет обычная история
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #43 :
Апрель 15, 2021, 16:46 »
Цитата: Igors от Апрель 15, 2021, 16:27
Так всегда было, неперемещаемость только для erase, для вставок и remove "пионерский привет" (rehash)
хэш (обычно) это массив линкед-листов. при реаллокации массива, внезапно, адреса (и ссылки на элементы) нодов линкед листов не меняются - эту гарантию даёт, например, std::unordered_map.
можно действительно хэш реализовать другими способами, и тогда при раллокации адреса могут поехать, но в qt5 он был старым-добрым массивом линкед-листов и давал гарантию при insert'e (по крайней мере, оно работало на практике)
Но как минимум странно имея имплементацию "по стандарту" менять ее на другую которую захотела левая пятка, поломав кучу кода.
При переходе на qt6 код ломается, и самое простое решение - выкинуть QHash нафиг и использовать std::unordered_map.
Цитата: Igors от Апрель 15, 2021, 16:27
Не стоит так "хвост распускать"
, дойдет до дела (выше) - будет обычная история
Просто ваши задачи требуют неадекватного количества времени чтобы понять вообще в чем задача - требования меняются каждую страницу потому что вы их "забыли" указать, но предложенное решение им (конечно же!) не удовлетворяет.
Цитировать
-я хочу сделать кнопку чтобы приложение закрывлось
-вот кнопка
-мне круглую надо
-окей
-и красную
-окей
-и чтобы шрифт зеленый
-ооок
-и чтобы диалог появлялся
-вот диалог
-да ты просто тупой, вот я взял и написал сразу круглую красную кнопку с зеленым текстом и диалогом а вы все форумом хрень какую-то предлагали. зато в шаблоны умеете!
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Compile-time определение реверсивности итератора (reverse_iterator)
«
Ответ #44 :
Апрель 15, 2021, 17:31 »
Цитата: Авварон от Апрель 15, 2021, 16:46
Но как минимум странно имея имплементацию "по стандарту" менять ее на другую которую захотела левая пятка, поломав кучу кода.
Ну, "эффективный менеджер" видать постарался.
Цитата: Авварон от Апрель 15, 2021, 16:46
При переходе на qt6 код ломается, и самое простое решение - выкинуть QHash нафиг и использовать std::unordered_map.
Мы тоже давно уже всё кутэшное контейнерьё повыкидывали... Они ещё и медленные часто.
Записан
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 не волк, в лес не уйдёт
Страниц:
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...