Ответы пользователя по тегу C++
  • Почему две идентичные команды выдают разные результаты?

    @res2001
    Developer, ex-admin
    Для 1 байтового без знакового числа ~0 дает 11111111.
    Делая (~0) << k вы обнуляете последние k бит числа. Далее битовое И с подобной маской дает обнуление последних k бит чилса, что и требовалось.
    Ответ написан
    1 комментарий
  • C++ собственный обработчик событий для отдельного экземпляра класса?

    @res2001
    Developer, ex-admin
    Обычно подобное делают через наследование, а не сохранение указателей на функции. Тогда вы будете иметь из методов полный доступ к членам класса.
    Т.е. вы имеете базовый класс TButton с виртуальной функцией onClick. Делаете собственный класс, родителем которого является TButton, переопределяете onClick. Профит.
    Так устроены многие GUI библиотеки типа Qt, MFC и т.п.
    Ответ написан
    Комментировать
  • Может ли библиотека на С++ хранить состояние при подключении к основному проекту на C#?

    @res2001
    Developer, ex-admin
    Может.

    В библиотеке функция DllMain() вызывается при загрузке и выгрузке библиотеки. При загрузке делаете инициализацию необходимых ресурсов, при выгрузке - очищаете. В промежутках - пользуетесь.
    Состояние можете объявить в виде глобальной (относительно библиотеки) структуры/класса, который будет содержать нужные данные.

    Если вы эти массивы передаете в библиотеку из внешней программы (а не сама библиотека их получает), то и держите их у себя до конца работы. В библиотеку достаточно передавать указатели на них (ссылки), при этом никакой кучи ресурсов затрачено не будет.
    Ответ написан
    Комментировать
  • Где найти примеры создания модуля для питон 3 из C++?

    @res2001
    Developer, ex-admin
    У Бизли в "Python. Подробный справочник" есть введение по написанию модулей, для старта подойдет.
    Дальше - родная документация.
    Ответ написан
    Комментировать
  • Какой библиотекой для создания сигналов вы используете в JS, или есть ли более удобные варианты на других языках?

    @res2001
    Developer, ex-admin
    python - numpy, scipy
    matlab
    В С/С++ зависит от того, что вам надо от библиотеки. Возможно будет достаточно fftw или аналогов.
    Ответ написан
    2 комментария
  • Время программы 2,062 надо 2 сек, как сделать?

    @res2001
    Developer, ex-admin
    Можно немного сэкономить, если прочитать сразу весь файл в буфер, а в массив загонять через std::stringstream или вообще руками. Аналогично и с записью - сначала преобразуете в текстовый буфер, затем оптом пишете в файл одной операцией. Файл при этом открывайте как бинарный.
    Возможно, если применить другой алгоритм сортировки то же будет увеличение производительности. В стандартной библиотеке далеко не самый быстрый алгоритм.
    Ответ написан
    Комментировать
  • C++ - как посчитать количество строк из файла, которые начинаются и заканчиваются на один и тот же символ?

    @res2001
    Developer, ex-admin
    Отладчик вам поможет!
    Ответ написан
    Комментировать
  • Как исправить заполнение массива минимальными значениями другого массива?

    @res2001
    Developer, ex-admin
    Когда находите минимальный элемент в исходном массиве сохраняйте его значение и индекс, заменяйте в исходном массиве значение минимального элемента на некоторое максимально возможное число (INT_MAX в вашем случае). Повторяйте процедуру пока не заполнится весь массив минимумов.
    Затем нужно восстановить исходный массив по ранее сохраненной информации.
    Ответ написан
    2 комментария
  • Польская запись. В чем ошибка?

    @res2001
    Developer, ex-admin
    У вас в коде забито другое выражение: (a + b) * (c - d)
    Где реализация стека?

    По реализации:
    1. Для вычислений вам не нужны 4 переменные или 10 (в зависимости от того сколько в выражении), достаточно двух для обычных бинарных операций (с двумя операндами). Результат промежуточного вычисления нужно снова вставлять в стек в место вытащенных операндов и операции.
    2.Алгоритм вычисления по прямой польской нотации неплохо описан на вики.
    нужно считывать выражение слева направо, рассматривая оператор и ближайшие к нему два операнда. Если среди этих операндов находится еще один оператор, то вычисление первого оператора откладывается, до тех пор, пока не будет вычислен новый оператор. Итерации этого процесса повторяются до тех пор, пока оператор не будет вычислен, что должно в конечном счете произойти, если в выражении количество операндов на один больше, чем количество операций (в случае бинарных операций). Как только оператор вычислен, он и его два операнда заменяются полученным значением (операндом). Поскольку оператор и два операнда заменяются на вычисленный операнд, то становится на один оператор и один операнд меньше.

    Таким образом стек тут не очень подходит, кроме операций push и pop нужно еще делать и обход списка в прямом направлении и вставка/удаление элементов в произвольной позиции.
    Либо как вариант со стеком - использовать 2 стека. Т.е из одного извлекаете отложенные и результаты вычислений помещаете во второй пока первый не опустеет, затем переключаетесь на второй и так до тех пор пока в стеке не останется единственное значение - результат вычислений.
    Либо с одним стеком, но изменить реализацию. Так чтобы не было структуры P_STACK.
    Ответ написан
  • С++ - как отсортировать структуру?

    @res2001
    Developer, ex-admin
    Реализуйте в структуре конструктор копирования и/или копирующий оператор присваивания, и сортируйте пузырьком (т.к. самая простая реализация соритровки). Можно еще реализовать несколько функций сравнения по разным атрибутам и передавать эти функции в пузырек (чтоб можно было делать сортировку по разным атрибутам с помощью одной функции сортировки).

    По коду:
    1.Вы начинаете писать на С++, а потом перескакиваете на Си (puts, printf) ...
    2.В struct student поля surname и gr объявлены как char, а в коде вы их используете как си-строки - это абсолютно разные вещи.
    3.Вы не правильно используете функцию puts. В таком виде у вас программа не соберется. Посмотрите документацию.

    Возможно что-то еще ...
    Ответ написан
    Комментировать
  • Можно воспользоваться HINSTANCE exe файла для поиска адреса функции?

    @res2001
    Developer, ex-admin
    NtCreateFile находится в NtDLL.dll
    Думаю, что можно использовать LoadLibrary/GetProcAddress для загрузки библиотеки и адреса функции.
    Ответ написан
    2 комментария
  • Как записать звук с микрофона и колонок в один поток?

    @res2001
    Developer, ex-admin
    Не знаю как это в DirectShow, но теоретически просто поэлементно сложить оба потока, при одинаковой частоте дискретизации. Если частота дискретизации различается, нужно привести к одной, а потом все равно сложить.
    Ответ написан
  • Как заставить std::array различать родителя и наследника?

    @res2001
    Developer, ex-admin
    Танцы с virtual. Для того они и придуманы.
    Тут еще вопрос в том как именно вы помещаете объекты в std::array и какие именно это объекты. В вашем случае вам нужно помещать в массив либо ссылки, либо указатели (умные), иначе рискуете словить проблемы.
    Ответ написан
    Комментировать
  • Как итерируется ranged for?

    @res2001
    Developer, ex-admin
    Итераторы - это абстракция созданная для того что бы можно было один и тот же подход применять для обхода принципиально разных контейнеров.
    Реализация итератора - это класс реализующий определенный интерфейс, как вы и написали. Внутри класса реализуйте как хотите, сохраняйте состояния, ссылки, счетчики в приватных членах данных класса итератора и т.д. и т.п. begin с end должны возвращать ссылку на соответствующий итератор. begin и end не входят в интерфейс итератора.
    Учите матчасть.
    Ответ написан
  • Как windows выделяет память для процессов?

    @res2001
    Developer, ex-admin
    Виртуальная память реализуется аппаратно-программным способом, т.е. без поддержки процессора не обойтись, поэтому ОС тут вовсе не "законодатели мод", а всего лишь используют подход предложенный разработчиками железа. Конечно, писатели осей могут то же поучаствовать в процессе проектирования железа и часто так и происходит, даже можно предположить, что сама виртуальная память появилась именно из-за хотелок разработчиков ОС. Этот подход принципиально одинаков что в винде что в линуксе для интеловских процов, т.к. диктуется спецификацией процессора, естественно разные реализации, но делают они одно и то же.
    Поэтому смело можете читать по этому поводу литературу о том как работает линукс с виртуальной памятью (если найдете), в общих чертах винда работает так же.
    Так же можно читать интеловскую документацию.
    Но, на самом деле, если вы не собираетесь разрабатывать ядра ОС, достаточно понимать в общих чертах как это работает.

    Вообще Рихтер хорошо пишет, попробуйте перечитать :-)

    Виртуальная память не "взаимодействует с ОЗУ" - ОЗУ неотъемлемая часть виртуальной памяти.
    Ответ написан
    2 комментария
  • Как сделать выход из цикла ввода строк в vector?

    @res2001
    Developer, ex-admin
    Оператор break.
    Ответ написан
    Комментировать
  • Связь между cpp файлами? Как можно получить и записать значение переменной из одного cpp в другой?

    @res2001
    Developer, ex-admin
    Возвращайте значения из одной функции и передавайте их в другую как параметры.
    Вернуть 2 значения можно в структуре или с помощью входных параметров ссылок. Пример.
    void writeCfgFile(int & directX, int & analogX){
           analogX =6;
           discretX=8;
    }
    void writeBinaryFile(int directX, int analogX) {
    }
    main() {
    int analog, direct;
    writeCfgFile(direct, analog);
    writeBinaryFile(direct, analog);
    }

    Когда нужно возвращать много значений, то их объединяют в структуру и точно таким же образом заполняют структуру.
    Глобальные переменные - это, конечно, просто и работает, но это не правильный подход.
    Ответ написан
    Комментировать
  • Как инжектить DLL через текстовый редактор?

    @res2001
    Developer, ex-admin
    :-) не верьте глазам своим. Скорее всего в текстовом редакторе правится конфиг для инжектируемой библиотеки. Сама библиотека отслеживает изменение конфига и перечитывает его.
    Ответ написан
    Комментировать
  • Как подгрузить одну DLL из другой?

    @res2001
    Developer, ex-admin
    Не вы первый. На вскидку:
    https://habr.com/post/133956/
    https://habr.com/post/215389/
    Ответ написан
    Комментировать