Ответы пользователя по тегу C++
  • Не собирается код с библиотекой audiere. Как исправить?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    audiere.lib нужно подключить в настройках проекта. https://stackoverflow.com/a/12322024
    Dev C++ не очень популярная среда разработки сейчас. Для Windows гораздо проще будет найти инструкции и помощь для Visual Studio. Community версия для нее бесплатная.
    Кроме того некоторые библиотеки могут не заработать совсем, но эта вроде должна везде завестись.
    Ответ написан
    1 комментарий
  • Как массив чисел перевести из char в int?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Show вроде должен нормально работать для чисел длинной 5 цифр. Для этого не нужно приводить к int.
    Long a, b;
    a.input();
    b.input();
    Long sum = a + b;
    sum.show();

    Ваш код можно значительно упростить:
    * Формула l2.arr[i] = (arr[i] + l1.arr[i] + k) % 10; работает и для первого разряда (i == 4 у вас), так как в начале k = 0.
    * Значение k тоже можно без if посчитать: k = (arr[i] + l1.arr[i] + k) / 10;
    Ответ написан
  • Как запихать безразмерный массив внутрь безразмерного массива?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Используйте std::vector. Это массив который может расширяться во время работы программы. Обычно это хороший выбор вместо массивов почти во всех случаях. Смотрите методы push_back или resize.
    Ответ написан
    1 комментарий
  • Программа не нагружает ни процессор ни видеокарту на 100%, что делать (openGL)?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Загрузка процессора на 100% обычно означает загрузку всех ядер. В вашем случае приложение однопоточное, и может загрузить только одно.
    Вполне вероятно что даже одно ядро будет большую часть времени ожидать отправки данных в видеокарту и не будет загруженно на все 100.

    Загрузка GPU еще более сложное понятие. Там уже могут быть сотни ядер и распределение нагрузки на них зависит от кучи параметров.

    Есть программы профайлеры, которые могут показать некоторую дополнительную информацию о вашей программе.
    Для NVIDIA есть https://developer.nvidia.com/nsight-systems
    С их помощью можно увидеть что именно делает программа большую часть времени.
    5e038ffec81ce497045236.png
    Тут еще вмешивается Vsync который ограничивает fps скоростью обновления монитора. Так что большую часть времени происходит ожидание.
    Ответ написан
    Комментировать
  • Ошибка #define, в switch case?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Раскрывается в такое:
    case CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_WRITE_DATA); :
    Ответ написан
  • Как передавать много сообщений через Socket?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Без кода сказать можно мало что. Если есть возможность залить на гитхаб, то шансов стало бы больше. Есть 3 подозрительных момента:
    Для каждого сообщения создаётся новый объект SocketOutputStream

    А нужно ли это? Почему бы не использовать этот stream все время пока живет сокет?
    создание SocketOutputStream окружено Poco:Mutex

    Попадает ли непосредственно запись в стрим и flush(деструктор) под этот mutex?
    использую классы SocketOutputStream, чтобы избавиться от ручного управления буферами, хвоставми и т.д. и т.п.

    Насколько я успел понять по документации этот класс ничего не знает про границы сообщений. Это примерно такой же стрим как и для записи в файл. Поэтому если размер сообщений может быть разный, то надо смотреть как вы вычитываете данные.

    По отладке сетевого кода могу посоветовать логирование вместо отладчика.
    Ответ написан
  • Как написать второй operator= в C++?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    1. Мне кажется steal не очень удачное название, так как может запутать. В C++ есть присваивание (assignment) где правый аргумент сохраняет значение и перемещение(move) где правый аргумент передает значение левому и теряет собственное (например строка становится пустой).
    Ваш код выглядит как assingn. В этом случае правый аргумент from правильнее сделать константным, так как менять его вы не планируете.
    void assignDataFrom(OverrideableInt& to, const OverrideableInt& from)

    2. >Как этому Item’у автоматически прописать stealDataFrom?
    Автоматически генерировать код в C++ пока нельзя. Reflection ожидается в будующих стандартах, но пока он есть только в виде эксперементальных реализаций.
    3. Оператор присваивания будет сгенерирован по умолчанию, если не определять его самостоятельно. Он будет использовать операторы присваивания всех нестатических полей класса. Получается для Item сгенерированный по умолчанию оператор сделает то, что вам нужно, если для OverrideableInt он определен правильно.
    4. assignDataFrom может использовать этот сгенерированный оператор.
    void assignDataFrom(Item& to, const Item& from) {
        to = from;
    }

    Так вы сможете написать обобщенную шаблонную функцию.
    Ответ написан
  • Как применить алгоритм "Разделяй и Властвуй" к неотсортированному массиву?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    >количество запросов многократно превышает размер массива
    Сортировка работает за O(n*log(n)), бинпоиск будет работать за O(log(n)). Суммарная сложность будет O(n*log(n)) при количестве запросов порядка n.

    Поиск полным перебором будет работать за O(n) для каждого запроса. Суммарная сложность будет не лучше O(n ^ 2), что очевидно хуже.

    Быстрее можно только с построением hash-таблицы. Но это дополнительная память и не «Разделяй и Властвуй».
    Ответ написан
    1 комментарий
  • Нужно ли создавать отдельную функция для каждого thread (_beginthread)?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Одну функцию можно запускать в нескольких потоках.
    P.S.
    1. Вы уверены что вам нужен _beginthread вместо std::thread?
    2. Убедитесь что computeDoneA0 и computeDoneA1 защищены для многопоточного использования.
    используйте std::atomic_bool или std::mutex + std::lock_guard для доступа к обычному bool
    Ответ написан
    1 комментарий
  • Потокобезопасный контейнер?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Посмотрите на библиотеку для очереди задач https://github.com/seanmiddleditch/jobxx/blob/deve...
    Может это и есть то что вам нужно.
    Основная идея в том, что мы не блокируем очередь надолго, это значит что "модификатор" всегда сможет положить туда новую задачу почти без ожидания.
    Ответ написан
  • Двумерный список в C++?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    std::vector<std::vector<int>> my2dArray;
    my2dArray.resize(nRows);
    
    for (int i = 0; i <= nRows; ++i)
    {
       my2dArray[i].resize(nColumns);
       for (int j = 0; j <= nColumns; ++j)
       {
          my2dArray[i][j] = myElemData(i, j);
       }
    }


    Печатать по тому же принципу.
    Ответ написан
    2 комментария
  • Как часто C/C++ используют для разработки под postgres?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    В достаточно крупных продуктах часто возникает необходимость общаться с бд. C++ не исключение.
    Перейти будет легко с любой SQL базы. Разница проявится в небольших деталях, способах настройки и оптимизации.
    Ответ написан
    Комментировать
  • Как линковщик производит подстановку функций из динамических библиотек?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Как уже сказал Mercury13 манглинг выполняется компилятором. Нужен он чтобы перегрузки функций и методы классов превращались в отдельные символы. И чтобы библиотеку можно было подключить, манглинг должен происходить по единому стандарту. В вашем случае линковщик и будет искать __D3foo12__ModuleInfoZ.
    Но линковщик подставляет тело функции только для статических библиотек (.lib/.a).
    Динамические библиотеки (.dll/.so) по определению должны загружаться во время старта или в процессе работы программы.
    Этим занимается динамический загрузчик. Он так же выполняет поиск по уже преобразованному имени.
    Ответ написан
    Комментировать
  • Как исправить return 1id?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    main должна быть обычной функцией, а у вас она обявлена внутри класса. AddElement при этом должен вызываться от экземпляра класса, как и положено методу.
    lists list;
    list.AddElement(n);

    Обратите внимание, что при создании list, firstElement и lastElement не будут инициализированы. Проще всего исправить так:
    Element * firstElement = nullptr; 
      Element * lastElement = nullptr;


    Возможно придется добавить к параметрам компилятора -std=c++14
    Ответ написан
    Комментировать
  • Гарантируется ли, что нулевой указатель всегда будет равен нулю?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Гарантируется. Первый вариант используется в большинстве случаев.
    Ответ написан
  • Существует ли удобный интерпретатор для C++?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Если и есть, то большого смысла в таком решении не будет.
    Не понятно как интерпритатор облегчит вам жизнь. Маленькие программы достаточно быстро собираются. А все плюшки и так дает IDE (Visual Studio Community для Win или QtCreator для Linux).
    Ответ написан
    Комментировать
  • Как описать метод?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Шаблонные методы должны быть реализованы в .h. Вы не можете вынести их реализацию в .cpp
    Разделить описание и определение можно внутри заголовочного(.h) файла можно.
    Ответ написан
    Комментировать
  • Как быстро сгруппировать набор точек (2500х2500) по ячейкам Вороного?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Если нужно быстрее чем за линейное время, то есть относительно сложный путь. Диаграмма вороного двойственна с триангуляцией делоне. Если соединить центры смежных ячеек диаграммы - получим триангуляцию. Локализоваться в триангуляции делоне. можно не перебирая все вершины, а переходя к соседним треугольникам в нужном направлении (delaunay triangulation walk).
    Зная в каком мы треугольнике, достаточно проверить расстояние до 3 его вершин которые совпадают с центрами ячеек вороного.
    Что-то такое реализовано тут:
    https://doc.cgal.org/latest/Voronoi_diagram_2/clas...
    И тут:
    https://doc.cgal.org/latest/Triangulation_2/classC...

    Если вы пытаетесь локализовать узлы регулярной сетки, то логично в качестве начального треугольника брать результат соседней вычисленной локализации, так как точки идут подряд. В функции по второй ссылке такая возможность есть.

    Может сработает более простой путь. Можно сначала разбить центры ячеек вороного по ячейкам регулярной(прямоугольной) сетки а затем искать ближайшую точку в соседних регулярных ячейках.
    Ответ написан
    Комментировать
  • Как задать и считать бесконечность?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Тут есть несколько вариантов решения: https://stackoverflow.com/questions/11420263/is-it...
    Ответ написан