Задать вопрос
  • Почему выводятся невразумительные числа?

    Ошибка вот здесь: int counter; Инициализируйте её: int counter = 0;.

    #include <iostream>
    #include <string>
    #include <vector>
    
    void change_status(int i, std::vector<bool>& people) {
        if (i > people.size()) {
            people.resize(i + 1);
        }
        if (i > 0) {
            people[i] = true;
        }
    }
    
    void come(int k, std::vector<bool>& people) {
        people.resize(people.size() + k + 1);
    }
    
    void worry_count(const std::vector<std::string>& commands, const std::vector<int>& values, std::vector<bool>& people) {
        int counter = 0;
        for (bool person : people) {
            if (person) {
                ++counter;
            }
        }
        std::cout << counter << std::endl;
    }
    
    int main(void) {
        std::vector<std::string> commands = {"COME", "WORRY", "WORRY", "COME", "WORRY_COUNT", "COME", "WORRY", "WORRY_COUNT"};
        std::vector<int> values = {5, 1, 4, -2, 0, 3, 3, 0};
        std::vector<bool> people; // true - беспокоящийся человек, false - спокойный
    
        int i = 0;
        for (std::string command : commands) {
            if (command == "WORRY" || command == "QUIET") {
                change_status(i, people);
            } else if (command == "COME") {
                come(i, people);
            } else {
                worry_count(commands, values, people);
            }
            ++i;
        }
        return 0;
    }
    Ответ написан
    Комментировать
  • Как ограничить количество потоков?

    Если стоит задача реализации с помощью 4-х потоков, то нужно использовать 4 потока. ThreadPool нужен для гибкой настройки использования потоков, например не больше 4-х в зависимости от входных условий.
    Ответ написан
    Комментировать
  • Нужна ли математика разработчику игр?

    saboteur_kiev
    @saboteur_kiev Куратор тега Разработка игр
    software engineer
    Математика нужна вообще любому разработчику.
    Особенно школьная.
    Ответ написан
    Комментировать
  • Как отсортировать вектор по одному из элементов структуры?

    @Mercury13
    Программист на «си с крестами» и не только
    std::sort(thrusters.begin(), thrusters.end(), 
        [](const calcThrusterType& x, const calcThrusterType& y) {
            return (x.angle < y.angle);
        });

    Вы используете typedef и в вашем компиляторе нет Си++11?
    bool angleLess(const cTT& x, const cTT& y) { return x.angle < y.angle; }
    
    std::sort(thrusters.begin(), thrusters.end(), angleLess);
    Ответ написан
    1 комментарий
  • Где у меня может быть ошибка в нахождении площади сложной фигуры?

    @Mercury13
    Программист на «си с крестами» и не только
    Обсуждение было в комментах, и ключевая причина — при comp_a < 0 корни не сортируются.

    Побочные проблемы кода.
    1. Можно было интеграл разности, а не разность интегралов.
    2. Лучше не использовать vector и pair на месте struct { a, b, c } — кроме случаев, когда есть важная автоматизация.
    Ответ написан
    Комментировать
  • Программа на С++ странно работает. Что делать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    5 / 9 == 0 - оба операнда целочисленные, деление целочисленное.
    5. / 9 == 5 / 9. == 5. / 9. == 0.555555556 - хотя бы один из операндов вещественный, деление вещественное.
    Ответ написан
    Комментировать
  • Как эффективно восстанавливаться к снапшоту?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    1) Хранить образы в хранилище с механизмом COW (ceph, ocfs2, btrfs, zfs)
    2) вместо отката к снапшоту просто создавать новый образ на базе нужного снапшота, а старый образ - стирать.

    Первое и второе вместе дают возможность клонировать машины сотнями в секунду.
    Ответ написан
    7 комментариев
  • Не собирается код с библиотекой audiere. Как исправить?

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

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

    saboteur_kiev
    @saboteur_kiev
    software engineer
    На логическом.
    Если нет смысла взламывать игру, ее не будут взламывать. Придумайте чтобы взламывать было неинтересно и банальная защита от дурака.
    Ответ написан
    1 комментарий
  • Есть ли сайт на котором есть большое руководство по c++/c#?

    @FabiBoom
    https://ravesli.com/
    Еще доки подробненько так описывают:
    www.cppreference.com
    Ответ написан
    Комментировать
  • Фреймворки для MFC?

    maaGames
    @maaGames
    Погроммирую программы
    Рекомендую вот это. Платно. Относительно дорого. https://codejock.com/
    Если не ошибаюсь, именно у них MS купили часть бибьлиотеки для настройки Ленты(Ribbon) и прочих красивостей интерфейса. Очень много удобных и красивых контролов и дополнений, не просто цвет кнопки.
    Ответ написан
    2 комментария
  • Моно ли присвоить переменной/указателю определённый адрес в памяти?

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

    Обращаться по присвоенному адресу (делать разыменование, получать значение лежащее по указанному адресу), если вы точно не знаете, что делаете, не стоит, т.к. это может привести к access violation (segmentation fault).
    В современных ОС используется виртуальная память, из-за чего память используемая программой должна быть корректно выделена с помощью механизмов предоставляемых ОС (new).
    В микроконтроллерах нет виртуальной памяти, поэтому вся память программе доступна сразу. Там вы можете свободно обращаться к любому адресу в пределах физически доступного адресного пространства.
    Ответ написан
    Комментировать
  • Как сделать вывод чисел в двоичной системе счисления?

    При помощи либы fmt, вывод в двоичной системе очень прост:
    fmt::print("{:b}", num);

    Если без либ, то можно написать функцию, которая выводит число в двоичной в 2 цикла. Первым циклом найти позицию самой старшей единицы, вторым циклом вывести двоичные цифры от найденной старшей вниз до нулевой.
    Ответ написан
    1 комментарий
  • Ссылка инициализируется разыменованным указателем. Почему такое поведение?

    Напомню лишний раз, что не важно, остаётся ли жива программа, запись по такому указателю представляет собой неопределённое поведение (Undefined Behavior). Это значит, формально, программа может форматнуть жёсткий диск или призвать демонов. Почему компилятор или программа не ловит такие ошибки — проверять доступ к памяти накладно, поэтому приходится всецело доверять тому, что ты знаешь, что делаешь.

    На заметку, это тоже неопределённое поведение:
    int a = 1;
    int b = 2;
    *(&a + 1) = 42;

    Ходить указателями разрешается только в пределах массива.

    UPD: Даже сама операция сложения, без разыменования - уже UB (пруф):
    *(&a + 2 - 2) = 42; // UB
    Ответ написан
    Комментировать
  • Как сделать простой TCP сервер с "key-value" БД?

    @K0lya28
    Получение и Изменение
    1)Через map.find() найти пару в std::map и получить итератор
    2)Если iterator == map::end(), ключа нет
    3)Отослать или изменить iterator->second

    Добавление
    1)map.insert(make_pair(ключ, значение))
    Ответ написан
    2 комментария
  • Как работают побитовые операторы?

    0177 - это число в восьмеричной системе счисления = 0111 1111 в двоичной
    Допустим, n = 1111 1010 1010 в двоичной с.с.

    1 & 0 = 0
    0 & 0 = 0
    1 & 1 = 1

    тогда получаем:
    0000 0111 1111
    1111 1010 1010
    ---------------
    0000 0010 1010
    Ответ написан
    Комментировать
  • C++ как вывести аски смайл, не указывая код?

    Под Linux, вроде, ничего не надо делать, стандартный терминал и так всё поддерживает, а ОС интерпретирует текст в char и string как UTF-8. Если хочешь Unicode под Windows, то добро пожаловать в адъ.

    1. Убедись, что исходный код сохранён в UTF-8. Если Visual Studio, нужно немного потанцевать с бубном.
    2. Куда вывести, в файл или в консоль? Вывести в стандартную консоль невозможно, нужно установить Windows Terminal, последнюю PowerShell и связать их (для этого ещё потанцевать с бубном).
    3. В программе, перед тем как послать юникодную строку в ОС (например, перед тем как печатать), убедись, что ты перевёл её из UTF-8 в системную кодировку (которая обычно UTF-16). В стандартной библиотеке такого нет, нужно подключать либу. Вот что я юзаю с Boost и fmt:

    namespace strings
    {
        using native_char = boost::filesystem::path::value_type;
        using native_string = std::basic_string<native_char>;
    
        namespace detail
        {
            inline void write(const std::string& string)
            {
                std::cout.write(string.c_str(), string.size());
            }
    
            inline void write(const std::wstring& string)
            {
                std::wcout.write(string.c_str(), string.size());
            }
        }
    
        using fmt::format;
    
        template <typename S, typename... Args>
        void print(const S& format_str, Args&&... args)
        {
            const auto string = fmt::format(format_str, std::forward<Args>(args)...);
            detail::write(boost::locale::conv::utf_to_utf<native_char>(string));
        }
    
        using boost::locale::conv::utf_to_utf;
        using boost::locale::conv::from_utf;
        using boost::locale::conv::to_utf;
        using boost::locale::conv::between;
    
        inline native_string to_native(const std::string& utf8)
        {
            return utf_to_utf<native_char>(utf8);
        }
    
        inline std::string from_native(const native_string& native)
        {
            return utf_to_utf<char>(native);
        }
    }
    Ответ написан
    2 комментария
  • Как поменять кодировку при записи данных в файл?

    @res2001
    Developer, ex-admin
    Нужно перекодировать текст в кодировку, которую вы хотите видеть в файле.
    Или сразу писать исходники в этой кодировке.

    А вообще найдите редактор, который понимает разные кодировки и используйте его для просмотра текста. На этапе изучения языка, возможно, нет смысла вникать в нюансы кодировок. Могу посоветовать Notepad++ или встроенный редактор Far manager.

    В винде с этим все достаточно запутано.
    Но кодировки в файле - это еще простой случай.
    Когда попытаетесь писать кирилические символы в консоль, вот тогда сможете полностью прочувствоввать всю глубину вопроса, если, конечно, на это хватит терпенья.
    Ответ написан
    2 комментария
  • Есть ли смысл всегда(почти) использовать short вместо int?

    В новом коде не стоит использовать ни int, ни short. Только int32_t, int64_t и прочие из #include <cstdint>. Потому что int, согласно стандарту, может быть 16, 32 или 64-битным (и это ещё упрощённо).
    Ответ написан
    Комментировать