• Очередь с приоритетами, скорость работы?

    longclaps
    @longclaps
    Вы меня извините, при всём уважении, вы - говнокодер. С этим надо что-то делать, для начала - признать этот факт. Возьмём самую длинную строку:
    reader = (tuple(map(str, line.split())) for line in stdin)
    чем она отличается от
    reader = (tuple(line.split()) for line in stdin)
    Ответ - вызовом map, который бессмысленно переводит str в str. Вы зачем это сделали? Там в задании (я не поленился, погуглил) был шаблон решения с рабочим проверочным кодом, а вы зачем-то заменили его странным не буду повторять чем.

    По существу: сложность алгоритма оценивается не измерениями, а мозгами. _heapify_max, комментарии в исходниках:
    """ Maxheap variant of heapify. """
    Смотрим heapify:
    """ Transform list into a heap, in-place, in O(len(heap)) time. """

    И где тут O(logn)?

    Попробуйте придумать нормальное решение.
    Ответ написан
    1 комментарий
  • Из-за чего ошибка чтения?

    @Mercury13
    Программист на «си с крестами» и не только
    Вы компилируете функцию в двоичный код и на месте же вызываете. Так что есть вопросы.
    1. Функции обеспечили правильное соглашение вызова?
    Мне что-то кажется, что при подобной ручной компиляции проще работать с соглашением PASCAL или STDCALL — ну, шут его знает.
    2. VirtualProtect работает с целыми страницами. Так что на куске памяти из сегмента данных (ну или из стека, полного кода не вижу) она в лучшем случае откажет, в худшем ничего не сделает. Проверьте, была ли ошибка.
    3. Первый параметр должен быть source, а не &source.
    Ответ написан
    Комментировать
  • Где почитать очень подробно о шаблонах?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Вот отличная книга: C++ Templates: The Complete Guide (2nd Edition) 2n.... Она выгодно отличается тем, что покрывает даже 17ый стандарт.
    Ответ написан
    1 комментарий
  • Каков C++ в геймдеве?

    Tiendil
    @Tiendil
    Разработчик ПО.
    >За последние три месяца мне удалось освоить Python
    не удалось

    >Разобрался с гит
    не разобрались

    >линуксом на уровне пользователя
    не разобрались

    >Lua
    не разобрались

    Для начала приземлитесь. За 3 месяца вы ни в чём из этого разобраться на хорошем уровне не могли.

    >Где писать игры для портфолио
    Это делать не обязательно. Это, конечно, плюс, но не такой существенный чтобы прямо быть обязательным.

    Программистов (да и всех остальных) нанимают, ориентируясь не только на опыт (доступных людей с целевым опытом всегда почти нет), но и на навыки и знания. Их можно получать разными способами, писать законченные игры - один из них, но не самый эффективный. Хотя бы потому, что законченная игра требует навыков из очень разных областей, все из которых прокачивать нет никакой необходимости.

    Определитесь чем конкретно хотите заниматься: физика, графика, логика, сеть, утилиты, etc и делайте что-то именно в этой области (демки, например).

    А так, чтобы попась в геймдев достаточно просто навыков программирования и хорошей теоретической базы (графы, математика), демки не обязательны.
    Ответ написан
    3 комментария
  • Как отследить действия при закрытии игры?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Любая потеря фокуса приложения это OnApplicationPause, после этого события приложение может убить операционная система, если, например, ей нужно освободить ресурсы. На мобилках в большинстве случаев это можно считать выходом из приложения. Во время перехода в браузер для авторизации, например, ваше приложение скорее всего выгрузят, а потом перезапустят при возврате обратно.
    Ответ написан
    Комментировать
  • Ошибки при заполнении вектора. С++?

    myjcom
    @myjcom Куратор тега C++
    using namespace std;
    class Student
    { 
    public:
        string name; 
        string last_name; 
        string year;
        string get() 
        { 
             string s =  name + ',' + last_name + ',' + year;
             return s;
        }
    };
    
    int main(int argc, char* argv[])
    {
        Student student;
        student.name="Ivan";
        student.last_name="Ivanov";
        student.year = "2001";
    
        vector<Student> v1;
        v1.push_back(student);
        cout << v1[0].get();
    }
    Ответ написан
    6 комментариев
  • При инициализации массива строк в объекте появляется ошибка "too many initializers for 'String [0]'". В чем может быть проблема?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Потому, что это запрещено стандартом. Укажите размер массива или используйте std::array.
    Советую добавить следующие флаги компиляции: -pedantic -Wall -Wextra.
    Ответ написан
    Комментировать
  • Где поискать опенсорс проекты на С++?

    Nipheris
    @Nipheris Куратор тега C++
    А как вы искали, если не секрет? Я хочу узнать, как искать так, чтобы ничего не найти.

    Запрос "c++ open source projects" даёт первой же ссылкой набирающие популярность C++-проекты на гитхабе, среди которых TensorFlow, биткоин, OpenCV, Электрон, Solidity и прочие монстры индустрии. Время поиска - ~20 секунд.
    Ответ написан
    1 комментарий
  • Где поискать опенсорс проекты на С++?

    myjcom
    @myjcom Куратор тега C++
    Комментировать
  • Как отправить изменения в git через jenkins?

    EreminD
    @EreminD
    Кое-что умею
    Ну, как минимум, вы можете просто выполнить bash

    git add .
    git commit -m '${env.BUILD_NUMBER}'
    git push origin ${env.target_branch}


    У вас pipeline?
    Ответ написан
    4 комментария
  • Как прошить BIOS через EZP2010 + SPI прищепку?

    @shmool
    Senior Hardware Engineer
    Советую выпрямлять руки, выпаивать микросхему и программировать ее одну на программаторе. Применение сплава Розе сильно облегчает выпаивание.

    Если объяснить происходящее коротко, то когда вы прищепкой пытаетесь программировать микросхему flash-памяти, то заодно программатор пытается запитать еще некоторое количество других микросхем, которые питаются от этой же шины питания, например мультиконтроллер, какие-то блоки хаба, еще кто-нибудь. Программатор на подобное не только не рассчитан, но и часто несет в себе защиту от повышенного потребления программируемой микросхемы. Плюс все те микросхемы, которые мы ненароком запитали, начинают жить своей жизнью и включившийся мультиконтроллер может начать вычитывать из флэшки свою прошивку, а программатор ее пытается программировать.
    Ответ написан
    1 комментарий
  • Что пишут на Java?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Везде и всё. Кроме драйверов.
    Ответ написан
  • Есть ли какие-либо недостатки у статических методов?

    @D3lphi
    Значит так, берем толстую тетрадь, ручку и пишем фразу "Статические методы не имеют отношения к ООП" до тех пор, пока не запомним это на всю жизнь.
    Суть объектно ориентированного программирование, как понятно из названия, заключается в том, что должен существовать объект. Статика существует не в контексте объекта, а в контексте класса! Из этого вытекает то, что на протяжении всего жизненного цикла вашего кода будет существовать лишь одно глобальное состояние статических членов класса.

    Использовать статику нужно в случае, если то, что вы ей описываете принадлежит всей группе объектов, а не одному. Например, у класса Human может быть статический метод numberOfLegs(), который возвращает количество ног у людей. Количество ног - это общее свойство для всех людей (Речь идет о здоровых людях). В данном случае можно было использовать константу класса, но это не так важно, ведь, по сути, константа - это тоже статический контекст. А вот имя - это уже свойство каждого отдельного человека. И очень важно чтобы статические методы не изменяли состояние системы в целом, не содержали побочных эффектов.
    В статические методы можно выносить какую либо служебную логику. Например, метод перевода числа из арабской в римскую запись следует сделать статическим.

    Есть ли у статического варианта какие-то подводные камни

    Большое количество. При чем, не таких уж и подводных. Из-за того, что статика глобальна, она плохо поддается тестированию, ее нельзя замокать. Глобальное состояние плохо поддается отладке. Отсутствует возможность подменить реализацию, так как это позволяют сделать объекты.
    Ответ написан
    4 комментария
  • Использование прерываний в ОС Windows?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Assembler
    Седой и строгий
    Для этого нужно написать драйвер режима ядра.
    Ответ написан
    Комментировать
  • Как вызывается родительский конструктор в C++?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    В С++ нужно отдельно реализовывать конструктор потомка
    class Base {
        public:
        Base(int _i): i(_i) {//блок инициализации
        }
        private: 
        int i;
    }
    
    class Derived : public Base {
        public:
        Derived(int _i): Base(_i) { //зовём super конструктор
        }
    }
    Ответ написан
    Комментировать
  • Зачем нужен указатель на void?

    @Mercury13
    Программист на «си с крестами» и не только
    void* используется как указатель на сырые байтовые данные, не имеющие конкретного типа.
    Обычно это используется…
    1. В чтении-записи в файлы и на устройства, когда мы можем писать туда абсолютно любые типы.
    2. В «многоликих» функциях, которые могут принимать данные разных типов (malloc/calloc, часть функций WinAPI и ODBC).
    3. Как дескриптор — указатель, который запрещается разыменовывать. В Си для этого также часто используют указатель на недоопределённый тип, в Паскале с другими правилами эквивалентности типов — на пустой record. Но только пока не появится очередная многоликая функция вроде CloseHandle.
    4. Для обеспечения т.н. замыкания — передачи callback’у контекста, откуда была вызвана функция, вызвавшая callback.
    BOOL WINAPI EnumWindows(
      _In_ WNDENUMPROC lpEnumFunc,
      _In_ LPARAM      lParam
    );
    
    BOOL CALLBACK EnumWindowsProc(
      _In_ HWND   hwnd,
      _In_ LPARAM lParam
    );

    Вот этот LPARAM, который обычно определяется как какой-то указатель, и есть замыкание. Функция EnumWindows обещает передать его в функцию lpEnumFunc без изменений.
    (В Си++ для этого также используют виртуальные интерфейсы, но такой метод, сами понимаете, языкозависим и не годится для межъязыкового API.)

    Что происходит на стороне функции? Одно из двух (считаем, функция написана на ЯВУ).
    1. Либо вызывается некая функция устройства, которая говорит: «записать 100 байт», и дальше уже работает железо.
    2. Либо мы преобразуем void* в нужный нам тип и работаем с ним.

    Типы указателям дают по трём причинам.
    1. Вы забыли про операцию «разыменовать указатель». Чтобы его разыменовать, он должен иметь тип!
    2. Чтобы не ошибаться и не переприсвоить несовместимые указатели.
    3. Для полиморфизма — в Си++, давая delete x, мы даже можем не хранить, сколько байтов в блоке, поскольку мы знаем длину типа. (Есть ещё и виртуальные классы, но это другой вопрос.)
    Ответ написан
    Комментировать
  • Загружается ли код DLL библиотеки в виртуальную память?

    pavelkarinin
    @pavelkarinin
    Full Stack Web Developer
    Если объяснить очень-очень по-простому и не вдаваться в тонкости, то дело обстоит так: DLL, которые содержат исполняемые функции, методы и прочее действительно должны быть загружены в адресное пространство, которое представляет собой некий буфер, он выделяется из объема оперативной памяти и этот буфер принадлежит только этому процессу, т.е. тому процессу, в котором выполняется приложение. Физическая память к этому диалогу между приложением и DLL не имеет никакого отношения... это если кратко и без фанатизма.
    Ответ написан
    4 комментария
  • Как обнаружить утечку памяти?

    Andrey2008
    @Andrey2008
    DevRel в PVS-Studio
    Вам помогут динамические анализторы. Плюс можно попробовать PVS-Studio: Да, PVS-Studio умеет выявлять утечки памяти.
    Ответ написан
  • Как итерируется ranged for?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Советую зайти в документацию и прочитать про типы итераторов и что это такое.
    Ответ написан
    Комментировать