Gregory
этот кейс по сути:
- вектор является полем класса обьект которого сконструирован хер знает где в начале (мб на стеке в каком нибудь main)
- а потом мы где то далеко по стеку начинаем по нему бегать таким итератором )
Gregory
ну и забегаем постоянно в начало стека к нашему вектору )
Andrei
Никакого ровным счетом.
🦥Alex Fails
Andrei
нифига себе не стоит. +15%
Andrei
Andrei
Andrei
Да, если не хочется ивалидировать храните индекс.
Andrei
Но вообще идея в том, что если писать реально заботясь о скорости, то мы СНАЧАЛА сделаем reserve нужного размера и больше никогда в жизни не будем перевыделять память в векторе.
Denis
Если мы не знаем заранее, сколько нужно памяти, это не сработает
Denis
А если знаем, можно использовать array
Andrei
Andrei
Речь не о статически известном количестве памяти, а об иммутабельном количестве памяти.
Andrei
Разные вещи.
Andrei
Еще раз внимательно прочитай.
Denis
Или в вектор складываются результаты вычислений, количество которых заранее неизвестно
Andrei
ты из файла прочитал число и выделил сразу нужное количество памяти.
Andrei
Andrei
Где нельзя заранее выделить достаточно памяти.
Andrei
Количество файлов — это вроде бы одна переменная :)
Denis
Ок, список файлов
Andrei
Зачем тебе _одновременно_ весь список? Ты его наверное вывести хочешь, или по сети передать. Для этого весь список в памяти не нужен. А если по какой-то странной причине нужен — то есть разумное ограничение сверху.
Sergey
К чему спор если есть deque. Выбирайте размер chunk = размеру кэш линии и всё. В худшем случае будете потреблять немного больше памяти. Вполне разумная альтернатива
Gregory
непонятно как скатились к теме правильного выбора контейнера под задачу
Denis
У дека тоже итераторы ломаются
Sergey
У дека тоже итераторы ломаются
по крайней мере не при реаллокации в следствии нехватки выделенного пространства. Просто не нужно посередине вставлять
Gregory
от темы "безопасных" итераторов вектора и насколько оно дорого
Sergey
Gregory
ну то что контейнеры над выбирать под задачу оно как то очевидно - разве не?
Sergey
Gregory
меня идея с "безопасными" итераторами зацепила исключительно в контексте: а можно ли дать такое джунам )
Gregory
т.е. есть ли вообще хоть какой то смысл
Gregory
пока не очень видно )
Denis
Они несложно пишутся для любого последовательного контейнера
Denis
А чем он невалидный?
Gregory
тем что "такие" итераторы не инвалидируются
Sergey
Sergey
лично я за range_v3 подобную обработку данных, где data переносится с помощью move-ctors между копиями контейнеров в pipe подобном виде, трансформируясь по пути
Sergey
Ребят, есть хороший способ для просмотра автоматически выведенных ссылок? Ну там посмотреть, rvalue или lvalue ссылка, с каким квалификатором она пришла и т.п. в тяжёлом шаблонном коде? Типа static_assert, но чтобы не останавливал компиляцию, а выводил какой нибудь warning вместе с нужной информацией... И вообще, как кто отлаживает шаблонный код?
Denis
Можно сделать темплейт с приватным конструктором, передсть в него эту ссылку и вызвать конструктор
Denis
Он выведет полный тип
Sergey
Denis
Ну да
Denis
Я не знаб других способов
Sergey
Ну да
хотелось бы не останавливать компиляцию, нужная специализация класса/функции может идти не первой..
🦥Alex Fails
еее отладка шаблонов. енабля_иф в помощь и статик_ассерт
Sergey
я создал структуру с набором переопределнных static_assert, и оставляю static_assert по очереди, комментируя остальные. Думаю ужасный способ)
Daniil
знаю я любителя шаблонов @ZaiZuPro
Sergey
вроде на какой то конфе был доклад про отладку шаблонов, может кто знает?
Gregory
случаем не что то связанное с clang AST ? )
Sergey
вот так не получилось(( http://pastebin.com/KiYSkbSB
Sergey
видимо вот, что мне нужно http://stackoverflow.com/questions/8936063/does-there-exist-a-static-warning
Anonymous
🦥Alex Fails
Gregory
У нас с @zamazan4ik крайне сильно расходятся результаты
Gregory
(относительные имеется ввиду)
Anonymous
🦥Alex Fails
#procxxbdaymeet
Неоф. встреча в Питере будет совмещена с митапом C++ spb user group, который будет проводиться 21 марта. Подробности по ссылке: https://www.meetup.com/St-Petersburg-CPP-User-Group/events/237846550/?rv=me1&_xtd=gatlbWFpbF9jbGlja9oAJDE1ZWE3OWVjLTA4YWItNDBmZC1iNjFmLWNmN2VkNmEzZmI3OQ&_af=event&_af_eid=237846550&https=on
Sergey
Sergey
gcc 6.2:
std_iterator_test: acc: 499999999500000000 time: 537
ath_iterator_test: acc: 499999999500000000 time: 541
clang 5
std_iterator_test: acc: 499999999500000000 time: 489
ath_iterator_test: acc: 499999999500000000 time: 488
везде -O3
Gregory
а что за проц?
🦥Alex Fails
надо таблицу в гдоках сделать
Gregory
😂
Gregory
ща я еще на Intel Quad посомотрю
Sergey
за протестированный комп скажу, что это рабочий (видюха для ml))
дома стоит попроще
🦥Alex Fails
На планшете прогнал count в 10 раз меньше
🦥Alex Fails
std_iterator_test: acc: 887459712 time: 160
ath_iterator_test: acc: 887459712 time: 134
std_iterator_test: acc: 887459712 time: 126
ath_iterator_test: acc: 887459712 time: 126
std_iterator_test: acc: 887459712 time: 130
ath_iterator_test: acc: 887459712 time: 128
🦥Alex Fails
Собирал шлангом 3.9.1 на armv7a
🦥Alex Fails
Старый мне отдай)
🦥Alex Fails
🦥Alex Fails
Мб компиль так соптимизнул чо?