+-1000 сущностей unit_s?
Да std::list редко когда приемлемо использовать
Прикольненько. а что лучше вместо него? а то я у себя сейчас как раз вектор на лист поменял там где вектор не нужен
И что эта замена дала?)
Наоборот, надо заменять лист на вектор, когда лист не нужен
Зачастую std::deque подойдет там, где не подходит вектор
Не выделяется память целым непрерывным куском?
Не всегда это приемлемо Например, когда ну уж очень много данных надо хранить
Ну сущности будут добавленын не сразу. Я подумал вектор будет более накладно.
А фрагментация — это приемлимо?)
Нет В 99% случаев лист будет накладнее вектора
Это сильно от конкретного случая зависит. Так что да, порой приемлемо
А что с фрагментацией не так, если надо просто гонять через range-based?
вектор вроже перевыделяет память при добавлении элементов?
Не все и не всегда пишут хайлоад, где кэш-миссы страшны настолько Да и более того, при невозможности хранить данные в одном непрерывном куске, дек спасает частично
Ну и ещё совет переключиться на С++20 и сделать auto operator<=>(uint_s) = default;
Когда такая невозможность достигается?
Я боюсь при переаллокации вектора с 7-8 значным числом элементов отсутствие кеш-миссов будет несильно заметно
auto operator==(const uint_s) const = default ты хотел сказать
Надрочили тебя на эти консты на работе Но да
32 бита и много данных (Ага, под 32 бита тоже собирают)
Но нет <=> всё-таки
Ага, и в чем проблема хранить в одном куске?..
Это типа единой конструкции для перегрузки операторов >, <, >= , <=, == ?
хм, действительно в каком-то из пропозалов <=> не генерил ==/!=
А вот не умещались одним куском никак. На дек перешли - проблема решилась Кейс реальный был
Он их генерит только если = default Если ты сам сделал, то нет
При плохом паттерне использования векторов можно x2 анонимки получить, с деком этого не будет
Ну вот, кто-то лист в программе использовал, зафрагментировал всё к чертям)))
Не очень понял что такое х2 анонимки
Половина выделенной памяти не могла быть использована
А как это получить?
Так reserve надо использовать
Это если ты заранее знаешь размер, что не всегда правда
Да, это верно Хотя чаще всего всё-таки это известно (на моей практике)
Сделай просто один огромный вектор и push_back в него по кд Любой адекватный аллокатор при достижении определенного размера на каждой реаллокации будет выделять блок памяти под текущий размер, в итоге не сможет переиспользовать старые (а в случае x2 вообще не сможет переиспользовать по математике)
Забавно, что мы уже об этом говорили довольно давно: https://t.me/supapro/756103
склероз ¯\_(ツ)_/¯
Так. Использовать их плохо?
Там говорилось, что <=> недостаточно, нужен отдельный == Емнип при <=> = default генерятся оба сейчас
Обсуждают сегодня