Deleted Account
дада
Daniil
Класс, не знал
IharOK
а, ну если не самописная функция то да...
Aleksei
Класс, не знал
тип ведь на месте остается
Deleted Account
это лучше чем бестолковые приведения типов, и Qunused
Mikhail
В общем. И вектор, и список лежат в памяти. Вектор — последовательно, а лист — не всегда, у каждой вершинки есть указатель на следующую и он может указывать на другой участок памяти Просто когда процессор хочет посчитать, например, ту же сумму чисел в кеш отправляется целый кешлайн, например, 64 байта. Он берет первую чиселку, кладет в аккумулятор. Идет за второй, а она такая — оп, тоже есть в кешлайне, за ней не надо идти в оперативную память по медленной шине. Таким образом в кешлайне лежит, например, сразу восемь чиселок, которые надо добавить к аккумулятору. Если лист лежит в памяти последовательно, то процесс, по идее, должен быть таким же. А если элементы как-то неоднородно в памяти лежат, за ними приходится ходить в память (опять-таки, шина в оперативную память очень медленная и читать оттуда очень дорого по сравнению с чтением из кэша)
Ну так согласно этому объяснению лист равен или медленнее чем вектор, но никак не быстрее
Mikhail
А кто говорит, что лист быстрее?
@HissingSound , у него в дебаге быстрее лист. Так то и без кэшей можно объяснить почему лист медленнее чисто алгоритмически
Dmitriy / დიმიტრი
Мне бы понять почему у меня быстрее в дебаге. Это же такая интрига
Dmitriy / დიმიტრი
Может дело в компиляторе? gcc 5.3.0
Mikhail
Ну понятно что дело в компиляторе. Не понятно как такое может быть в принципе
Mikhail
Я могу еще представить, что компилятор в дебаге не оптимизирует обращение к памяти вектора, и каждый раз обращение по индексу происходит заново. Т.е. итератор каждый раз высчитывается заново. Но тогда бы они были равны по скорости, а не быстрее
Michael
может проверки на валидность памяти или что-то вроде?
Mikhail
могут быть точнее
Denis
Вектор реаллоки делает при увеличении, а лист нет
Mikhail
если они включены, то будут везде
Dmitriy / დიმიტრი
Ща clang'ом соберу
Mikhail
Mikhail
Вообще стоит добавить еще один тест
Mikhail
Для вектора
Mikhail
когда числа брать напрямую из памяти, как будто это int[] а не вектор
Mikhail
В этом случае должно быть быстрее, а если нет, то это какая то магия
Mikhail
а если же быстрее, то разница в исполнении итераторов
Mikhail
итератор вектора почему то медленнее итератора листа в дебаге
Dmitriy / დიმიტრი
Dmitriy / დიმიტრი
странная какая-то херня получается
серёжа
о_О
Mikhail
странная какая-то херня получается
Добавь тест где будешь брать значения по указателю int* из вектора
Michael
и все-таки возмножно он постоянно проверяет выход за границу, листу то такие проверки не нужны
Dmitriy / დიმიტრი
типа vector<int> на vector<int *>? Или ты про другое?
Mikhail
и все-таки возмножно он постоянно проверяет выход за границу, листу то такие проверки не нужны
Там отдельный метод есть у вектора, где есть проверка. А итератор, это по сути указатель, не нужны ему проверки
Mikhail
типа vector<int> на vector<int *>? Или ты про другое?
Нет. Сделай так: int* pArray = &iVector[0]
Michael
что за метод?
Mikhail
и посчитай используя pArray
Mikhail
фором например
Dmitriy / დიმიტრი
Ща попробую
Stanislav
вангую погрешность измерений :D
Deleted Account
Нет. Сделай так: int* pArray = &iVector[0]
аесли итератор заюзать и его ++ двигать?
Michael
а на классическом for такое же поведение?
Mikhail
аесли итератор заюзать и его ++ двигать?
скорее всего такая же проблема будет
Mikhail
Нужно без итераторов
Mikhail
чтобы проверить гипотезу, что в них проблема
Mikhail
вангую погрешность измерений :D
Она была бы не постоянной
Mikhail
т.е. то лист был бы быстрее, то вектор
Mikhail
а тут стабильно и разница большая
Mikhail
Кстати, если выяснится, что проблема в итераторах, можно будет чотко подъебывать собеседующих с этим вопросом :)
Dmitriy / დიმიტრი
стало быстрее
Mikhail
Значительно быстрее
Mikhail
Теперь в релизе давай посмотрим
Dmitriy / დიმიტრი
У меня походу комп сыт уже этим примером. На релизе выдает 0 ms. Ща попробую поменьше велечину указать для замера времени
Deleted Account
чотыбесишся!
Dmitriy / დიმიტრი
list cycle это ппц 😂
Mikhail
Ну вот, похоже с итераторам вектора в дебаге какой то косяк
Deleted Account
Ну вот, похоже с итераторам вектора в дебаге какой то косяк
ну он весь такой дебажный, неэфиктивный
Mikhail
Но лучше несколько раз позапускай свой тест в дебаге и релизе, потому что у тебя процесс может прерываться на неопределенное время в случайные промежутки времени
Mikhail
Ага
Mikhail
да это бы также и на лист влияло бы
Denis
for(auto i=v.begin();i<v.end();++i)
Igor
it = std::begin(vec);
Igor
Это только старт
Denis
i = v.begin() + 42
Igor
А потом двигай
Surreal
Немного оффтопа. Просто хочу выразить свою благодарность разработчикам selinux и драйверов nvidia за потраченные 2 часа времени в попытках найти в чем причина поломки драйверов после апдейта из репов.
Surreal
Denis
std::next
Зачем?
Igor
Главное проверяй на std::end(vec);
Surreal
Затем.
Igor
Вот пример тогда: https://ideone.com/zfLALN
Igor
Это имелось ввиду?
Igor
Просто перемещаемся на 4
Sergey
посоны. а вот примут к рассморению такой пропосал?
Sergey
убрать запись чисел в восьмеричной системе