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

32 ответов

25 просмотров

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

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, шикарный вариант это протащить условно мутабельность через трейты компаратора.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта