170 похожих чатов

32 ответов

24 просмотра

Уб в общем случае

Alexander-Tulikov Автор вопроса
Kirill Bolshakov
Уб в общем случае

Интересно, что изменилось с Scott Meyers - Effective STL, p79: As an example, look again at the setTitle call we just saw that failed to compile under some implementations: EmplDSet::iterator i = se.find(selectedlD); if (i != se.end()) { i->setTitle("Corporate Deity"); // some STL implementations will reject this line because *i is const } To get this to compile and behave correctly, we must cast away the constness of *i. Here's the correct way to do it: if (i != se.end()) { const_cast<Employee&>(*i).setTitle("Corporate Deity"); // cast away constness of*i }

Alexander Tulikov
Интересно, что изменилось с Scott Meyers - Effecti...

Effective STL уже устарело, ну и в те древние времена культура разработки была хуже

Alexander Tulikov
Интересно, что изменилось с Scott Meyers - Effecti...

Он ещё make_unique предлагал самому в std добавить, хотя формально это уб.

Alexander Tulikov
Интересно, что изменилось с Scott Meyers - Effecti...

Рекомендую дочитать главу до конца, вместо того чтобы вырывать слова из контекста.

Alexander-Tulikov Автор вопроса
magras
Рекомендую дочитать главу до конца, вместо того чт...

Там сказано, что это UB? Нет. Там дальше просто приведён универсальный алгоритм.

Kirill Bolshakov
Он ещё make_unique предлагал самому в std добавить...

У меня есть сомнения, что там речь шла о добавлении в namespace std, скорее всего о добавлении в свой неймспейс.

Alexander Tulikov
Там сказано, что это UB? Нет. Там дальше просто пр...

int i = 0; const int& cr = i; const_cast<int&>(cr) = 42; В этом коде нет UB, но компилятор не подскажет когда оно появится.

Alexander Tulikov
Там сказано, что это UB? Нет. Там дальше просто пр...

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

Alexander-Tulikov Автор вопроса
magras
Это же пример плохого кода, который сам автор не р...

Никто и не говорит, что это лучшие практики. Это способ решения поставленной задачи как есть. Понятно, что использовать extract или перейти на map это более правильный подход.

Alexander Tulikov
Никто и не говорит, что это лучшие практики. Это с...

Extract не может быть правильным подходом. Это erase/insert с поиском и перебалансировкой. Если очень надо лучше уж на intrusive тогда перейти. Или set из указателей если это просто индекс.

Alexander-Tulikov Автор вопроса
Dmitry Sokolov
Extract не может быть правильным подходом. Это era...

Это подход, предлагаемый Мейерсом в упомянутой книге как универсальный. Асимптотика, если тебе надо было этот элемент искать, не изменяется.

Alexander Tulikov
Это подход, предлагаемый Мейерсом в упомянутой кни...

Extract это потенциально перебалансировка. Последующая вставка это logn + опять потенциально перебалансировка. Вообще избыточна эта const'овость итераторов на мой взгляд. Всё равно есть много способов отстрелить ногу :) нетранзитивный компаратор, mutable, сравнение через указатели...

Dmitry Sokolov
Extract это потенциально перебалансировка. Последу...

Мне тоже иногда хочется mutable set, но я не готов видеть его в проде.

magras
Мне тоже иногда хочется mutable set, но я не готов...

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

Dmitry Sokolov
Тут же вопрос обычно в разделении на пару ключ/зна...

Да, я понимаю проблему, но мне кажется лучше иметь безопасное решение по-умолчанию. Все-таки foot gun'ы связанные с компаратором сразу вызовут вопросы на ревью и ломают не только set. А здесь еще одно место за которым нужно следить. При этом на ревью изначальной реализации это будет еще можно проконтролировать. А вот при последущей модификации кода пропустить проблему будет легко.

magras
Да, я понимаю проблему, но мне кажется лучше иметь...

О, надо по аналогии с transparent втащить мутабельность set через компаратор!

magras
А что за transparent?

Компаратор может содержать нечто под названием is_transparent, что врубает полиморфный поиск. Т.е. поиск с использованием ключей не const key_type&

magras
А что за transparent?

Точно так же можно туда засандалить is_partial detection. Чтобы const снять с итераторов.

magras
А что за transparent?

std::less<void> как пример transparent

Dmitry Sokolov
std::less<void> как пример transparent

хм. Спасибо. Надо будет еще раз посмотреть как это работает.

magras
хм. Спасибо. Надо будет еще раз посмотреть как это...

Это очччень полезная штука, например поиск по string_view когда ключ string и т.п. Я их вообще затайпдефил сразу, transparent_map/transparent_set.

Dmitry Sokolov
Extract это потенциально перебалансировка. Последу...

это гораздо сложнее, чем на ровном месте инты поменять в std::set<int>

Kirill Bolshakov
это гораздо сложнее, чем на ровном месте инты поме...

Это ровно то же самое, просто за вычетом allocate/deallocate.

Kirill Bolshakov
нет, это проще

Ну условно erase это extract + drop node. Insert это create node/find insert point/insert/rebalance. Убираются только drop/create node.

Dmitry Sokolov
Ну условно erase это extract + drop node. Insert э...

А, я про неконстантный итератор имел ввиду

Kirill Bolshakov
А, я про неконстантный итератор имел ввиду

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

Похожие вопросы

Обсуждают сегодня

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта