Дмитрий ⬡
Ты ходишь в кучу не за всем вектором, там непрерывный кусок памяти. Полезнее для кешей и оптимизации, если память есть, только инвалидация портится.
Дмитрий ⬡
Списки нужны, если "ой кто-то держит указатель на ноду, может её внезапно удалить из середины"
Aleksander
как это не за всем? При добавлении элемента надо увеличить вектор. Выделяем новый большой кусок и перекладываем содержимое старого. Перекладывание может не понадобиться если алокатор сможет пристегнуть новый кусок к старому.
Aleksander
Или я сильно упрощённо смотрю на вещи? (Никогда не приходилось лазить внутрь MMU)
Berkus
Berkus
причем лист будет выделять ноды в разных кусках памяти, cache locality идет к черту
Berkus
Berkus
это к делу не относится вообще никак
Berkus
к тому же P-tagged обычно только L1 кэш, остальные через MMU мапятся все равно, разницы для них никакой
Крылатый
Aleksander
итого, vector и подобные выигрывают потому что условно непрерывные и процу проще кешировать эту ботву. Прочие варианты сливают из-за хреновой кешируемости
Дмитрий ⬡
Дека норм (она изнутри — это набор кусков какой-то длины, так можно с обоих концов кушать и наслаждаться)
Oleg
наверное один из лучших стандартных контейнеров
Дмитрий ⬡
Oleg
Aleksander
Oleg
в общем, чем плюсы хороши - ты можешь выбрать то, что тебе нужно под твои задачи, а не пользоваться общим чем-то, что плохо везде
🦥Alex Fails
вроде на русише где-то валялось (если я не путаю)
Aleksander
ага, поэтому я не пользуюсь никакими контейнерами
Aleksander
безконтрольно ходят в кучу
Aidar
Ну у листа вон можно вставлять в середину без инвалидации указателей/итераторов
Oleg
и удаление, более того, когда у тебя есть вероятность частых реллокаций вектора, то тоже лучше лист.
🦥Alex Fails
Что за чат с книгами?
это я создал как костыль, пока мы бота книжного не допишем: https://t.me/joinchat/AAAAAE1yUq2Kh6WdPCtjMA
🦥Alex Fails
Igor
Aidar
Aidar
Там неочевидный <
Vitaliy
Aidar
Oleg
бгг
Vitaliy
Aidar
Тут уже были дискуссии насчёт обощенного оператора сравнения для контейнеров например
Aidar
И вроде это дикая дрисьня
Aidar
Явное лучше неявного в данном случае точно
Vsevolod
а можно легкий оффтоп: сколько сейчас примерно медианная зарплата с++ сениора в Москве?
Oleg
это очень депендс, кмк
Aidar
Короче лучше ваще никогда не определять порядок разных типов
Oleg
Aidar
А макс задаёт порядок
Berkus
Oleg
лолшто?
🦥Alex Fails
Oleg
Разумно только в одном случае - когда твой контейнер узко заточен и оптимизирован под твой тип данных
🦥Alex Fails
Berkus
Aidar
Aidar
Абстрактные
Oleg
Oleg
Aidar
Я говорю что порядок разных типов не имеет смысла
Berkus
да.
учись велосипедить тогда, иначе не выживешь
Aidar
Запись 3<5.0 я бы тоже запретил на самом деле
Vitaliy
Ладно, я не увидел аргументов. Думаю, что дискутировать дальше нет смысла.
Aidar
Аргумент - страдает банально читаемость и предсказуемость результата
Vitaliy
В каком случае ? Можно кусочек кода ?
Aidar
a::operator<(b)
b::operator<(a)
Могут быть определены ваще по разному семантически
Aidar
Что вернёт Макс?
Berkus
а про чо вы тут спорите?
Aidar
Хотя это противоречивость порядка
Aidar
Хз ваще как аргументировать то что порядок в общем случае неопределен
Vitaliy
а про чо вы тут спорите?
Про недостатки вот такой функции:
template<typename T1, typename T2>
auto max(T1 first, T2 second);
Berkus
Крылатый
Её обмазать нужно коньтрактами, ИМХО.
Berkus
Aidar
Ее можно определить ну там для арифметических типов
Vitaliy
Aidar
Для всевозможных нельзя как раз