Anatoly
то есть, ребята из VK могут подсунуть тебе исходных файл, как хороший для unordered_set, так и плохой.
Anatoly
а могут вообще сказать - чего это ты преждевременной оптимизацией занимаешься и выгонят взашей :)
Anatoly
Это ты о чем? Или даже к чему?
Nikita
А на слово "рефакторинг" реагируют как на воровство
Alexander "SonnySlave"
http://jrfonseca.blogspot.com.by/2008/09/fast-sse2-pow-tables-or-polynomials.html
Joy
По поводу инклюдов я накинулся на тему и выяснил вот что - порядок имеет значение, и это не "вопрос стиля". Это вопрос времени компиляции. Типа чувак провел исследования, замеряя сколько раз каждый заголовочник компилится. Там цифры для проекта в 300 cpp-файлов и 300 заголовочных оказались дикие, типа самый "популярный" заголовочник компилится 10k раз. Ну и собссно правила он написал такие: 1. всегда в cpp первым включается собственный заголовочный файл 2. в заголовочном файле нужно включить все хедеры, которые требуются чтобы его можно было распарсить при сборке (этого я не понял, видимо автор знает какой-то способ не включать в хедерах другие хедеры вообще) 3. в заголовочном файле необходимо включить только самый минимум, который нужен для сборки, все остальное объявить через forward declarations 4. (это я сам дописываю, у него это есть но почему-то он не упомянул это как правило) любые большие либы и стандартные библиотеки включаются последними в списке http://gamesfromwithin.com/physical-structure-and-c-part-1-a-first-look http://gamesfromwithin.com/physical-structure-and-c-part-2-build-times
Joy
А гугл в своих гайдлайнах считает иначе: >Avoid using forward declarations where possible. Just #include the headers you need.
Anatoly
По поводу инклюдов я накинулся на тему и выяснил вот что - порядок имеет значение, и это не "вопрос стиля". Это вопрос времени компиляции. Типа чувак провел исследования, замеряя сколько раз каждый заголовочник компилится. Там цифры для проекта в 300 cpp-файлов и 300 заголовочных оказались дикие, типа самый "популярный" заголовочник компилится 10k раз. Ну и собссно правила он написал такие: 1. всегда в cpp первым включается собственный заголовочный файл 2. в заголовочном файле нужно включить все хедеры, которые требуются чтобы его можно было распарсить при сборке (этого я не понял, видимо автор знает какой-то способ не включать в хедерах другие хедеры вообще) 3. в заголовочном файле необходимо включить только самый минимум, который нужен для сборки, все остальное объявить через forward declarations 4. (это я сам дописываю, у него это есть но почему-то он не упомянул это как правило) любые большие либы и стандартные библиотеки включаются последними в списке http://gamesfromwithin.com/physical-structure-and-c-part-1-a-first-look http://gamesfromwithin.com/physical-structure-and-c-part-2-build-times
Стражи включения, pragma once не позволят для одной единицы трансляции компилировать один и тотже заголовчный файл, как бы ты их не переставлял. Так что, если взять один cpp с N заголовочными файлами и комбинаторно заняться перестановками ты должен получить примерно одинаковые времена. Так что, приведи ссылку на "исследования".
Joy
Стражи включения, pragma once не позволят для одной единицы трансляции компилировать один и тотже заголовчный файл, как бы ты их не переставлял. Так что, если взять один cpp с N заголовочными файлами и комбинаторно заняться перестановками ты должен получить примерно одинаковые времена. Так что, приведи ссылку на "исследования".
Там две ссылки чуть выше, в которых это все подробно расписано. Например, With every header file having include guards around it, I turned on the /showincludes switch in Visual C++ and performed a full build. The total number of includes during the course of building the 300 classes in the library was an astounding 15,264. Better than the worst-case-scenario we calculated earlier, but still tremendously high.
Joy
Чой-то не помогли гварды
Anatoly
Прочитай еше раз мое предложение. При прочих равных порядок включения для одной единицы трансляции не будет играть роли.
Joy
А, ну ок, не буду спорить
Aidar
У вконтактика вступительная задачка при подаче на вакуху: Вашей программе в качестве аргумента будет передано имя файла, в котором будет находиться множество строк (ASCII символы с кодами от 32 до 127). Далее Ваша программа должна считывать строки из stdin, пока не придет строка "exit". После каждой считанной строки Ваша программа должна выводить в stdout строку "YES" или "NO" в зависимости от того, встречается данная строка в переданном файле или нет. Размер файла со словарем не превосходит 128мб. У меня 3 варианта: 1) Загнать все строки в память в плоский массив, рядом создать массив указателей на эти строки, отсортировать массив указателей по возрастанию строк и искать бинарным поиском, O(log n) 2) Загнать все строки в память в плоский массив, напихать этих строк в хеш-таблицу (физически напихать указателей на эти строки в хеш-таблицу), искать за O(1) 3) Захерачить все строки в ахо-корасика, искать за O(1), но память раздует из-за построения графа. Ещё варианты?
Память не раздует
Aidar
Ахокорасик не нужен ты же не подстроки ищешь
Ostap ꑭ
У вконтактика вступительная задачка при подаче на вакуху: Вашей программе в качестве аргумента будет передано имя файла, в котором будет находиться множество строк (ASCII символы с кодами от 32 до 127). Далее Ваша программа должна считывать строки из stdin, пока не придет строка "exit". После каждой считанной строки Ваша программа должна выводить в stdout строку "YES" или "NO" в зависимости от того, встречается данная строка в переданном файле или нет. Размер файла со словарем не превосходит 128мб. У меня 3 варианта: 1) Загнать все строки в память в плоский массив, рядом создать массив указателей на эти строки, отсортировать массив указателей по возрастанию строк и искать бинарным поиском, O(log n) 2) Загнать все строки в память в плоский массив, напихать этих строк в хеш-таблицу (физически напихать указателей на эти строки в хеш-таблицу), искать за O(1) 3) Захерачить все строки в ахо-корасика, искать за O(1), но память раздует из-за построения графа. Ещё варианты?
Бойер-Мур
Aidar
У вконтактика вступительная задачка при подаче на вакуху: Вашей программе в качестве аргумента будет передано имя файла, в котором будет находиться множество строк (ASCII символы с кодами от 32 до 127). Далее Ваша программа должна считывать строки из stdin, пока не придет строка "exit". После каждой считанной строки Ваша программа должна выводить в stdout строку "YES" или "NO" в зависимости от того, встречается данная строка в переданном файле или нет. Размер файла со словарем не превосходит 128мб. У меня 3 варианта: 1) Загнать все строки в память в плоский массив, рядом создать массив указателей на эти строки, отсортировать массив указателей по возрастанию строк и искать бинарным поиском, O(log n) 2) Загнать все строки в память в плоский массив, напихать этих строк в хеш-таблицу (физически напихать указателей на эти строки в хеш-таблицу), искать за O(1) 3) Захерачить все строки в ахо-корасика, искать за O(1), но память раздует из-за построения графа. Ещё варианты?
1) указатели не нужны. String и так хранит указатель
Aidar
Сравнения долгие
Padureac
Т.е. есль хочешь чтоб работало надо инициализацию в struct удальть
Anatoly
а вот такой с моей стороны неожиданный вопрос: есть способы регулировать размер чанков в std::deque?
Anatoly
например, я хочу регулировать, чтобы размер страницы std::deque был кратен определенной величине
Anonymous
Всем привет Есть определённый набор координат, как можно из него получить изображение bmp?
Alexander "SonnySlave"
Это всё детали реализации
Рома
кто знает про allegro? она изначально software рендерит?
kitsu
Есть какой-нибудь шорткат для передачи member-function как лямбду? e.g: Вместо f([&obj](auto t) { obj.g(t); }) Использовать f(&obj.g)
kitsu
бинд совсем печально смотрится, ну лан, спасибо
Ignat
ну учитывая, что this — это указатель, тебе в любом случае придётся во что-нибудь оборачивать
Kirill
Ему правда все равно надо во время вызова this передавать
Kirill
Ну или bind, который не короче, как уже сказали
Александр
можно как-то без лишних ухищрений проект на cmake прогнать чем-то, что укажет на лишние include?
Александр
если брать стороннюю тулзу, придется ей скармливать флаги компиляции и список файлов - лень
Berkus
iwyu запусти
Александр
она со шлангом идёт или отдельно собирать?
Александр
вроде нашёл, спасибо
Kota
Добрый вечер, скажите есть ли канал по swift/xcode ?
Yegor
Блин я тупой но как вы пишите сложный алгоритм, например составление школьного расписания (Я начинающий + мне 14)
Олександр
@supapro
Vsevolod
https://en.wikipedia.org/wiki/Boolean_satisfiability_problem + SAT солвер
Vsevolod
и никаких алгоритмов не надо
Anatoly
хочу избежать дублирования кода в случае следующих перегрузок: void foo(std::initializer_list<boo> lst); // (1) void foo(std::vector<boo> lst); // (2) способ 1: реализовать (1) через (2), но зачем лишняя аллокация на ровном месте? способ 2: добавить шаблон интервальной версии foo и через него реализовать (1) и (2): template<typename It> void foo(It begin, It end); какие еще будут мысли?
Vsevolod
Так initializer_list сжирает же все остальные неявные конструкторы
Mark
Ребят , кто знает норм сайт , где можно качать книги пиратские ( сори за оффтоп )
Mark
Тщ майор, вам зачем?
Книгу хочу скачать , нигде не могу найти . Бумажную не варик , т.к не считаю что стоит платить за книгу , автор которой уже умер и не поимеет ничего с этой покупки
Mark
Слышал в торе есть библиотека , но оттуда на смартфон столько мороки
Mark
1) в google play есть orbot, оттуда tor 2) #flood @fludpac
Понял , сори. ( книга не по Си кстати ) . Буду искать
kitsu
А в gtest можно как-нибудь объеденить инициализацию SetUp-а для множества независимых тестов? Ну кроме глобальных переменных, конечно же
kitsu
fixture же
так он же инициализируется каждый раз при новом тесте
kitsu
нене, у меня есть сильно медленная штука и хочется ее не инициализировать каждый раз
Berkus
если надо глобальную инициализацию то переопредели suite runner, там вызови что надо, а потом тесты запусти
kitsu
оке, гляну спасибо
kitsu
хотя звучит как-то сложновато и не очень надежно
kitsu
Joy
1. Во-первых да, на флибусте нет (или почти нет) технической литературы 2. Во-вторых, для доступа к флибусте добавляете к себе в контакты телеги флибуста-бота @flibustafreebookbot и пишите ему название книги либо автора
Joy
Читаю Лакоса. Цитирую: Major design rule: The . c file of every component should include its own . h file as the first substantive line of code. "Говностатья из интернета" тоже называет это "правилом №1". Может, не такая уж она и говностатья?
Joy
Это кодстайл
что ты имеешь в виду? что это вопрос исколючительно стиля?
Joy
Лакос приводит пример, когда код #include <iostream.h> #include "wildthing.h" компилится в то время как #include "wildthing.h" #include <iostream.h> нет
Joy
именно поэтому собственный заголовочный файл обязан идти первым
Aidar
И в чем заключается пример? В баганных недописанных хедерах?
Joy
В отсутствии forward declaration типа ostream внутри хедера
Aidar
В отсутствии forward declaration типа ostream внутри хедера
Для Острим есть отдельный хедер онли с форвард декларациями