• Как передать двойной массив в подкласс из класса, сохранив адреса массива?

    @dima20155
    you don't choose c++. It chooses you
    У вас разные типы
    this->figure = figure[4][4]; // ТУТ КРИЧИТ СРЕДА

    this->firgure - bool [4][4]
    аргумент конструктора - bool * [4][4]

    UPD:
    Забыл упомянуть про хороший читаемый вариант с ссылкой.
    https://godbolt.org/z/W87Y8xWh3

    И про не такой хороший с помощью указателя, который опаснее:
    https://godbolt.org/z/c4Gsb8Mz5

    И конечно же лучший вариант std::array и ссылка внутри класс Rotation на std::array
    Ответ написан
    2 комментария
  • Как лучше организовать архитектуру классов?

    @dima20155
    you don't choose c++. It chooses you
    Указатель/ссылка это вполне ок использовать, но зачастую лучше реализовать взаимодействие через класс-интерфейс.
    Например, вы можете захотеть использовать разную реализацию для однопоточности и многопоточности. В таком случае крайне удобно будет иметь интерфейс. Возвращаясь к ссылке/указателю на класс: это может быть тоже приемлемо, но нужно понимать что вы будете делать с Storage, кто будет им владеть и т.д.

    Также можно реализовать взаимодействие через callback функции (что по сути упрощённый вариант интерфейсного класса).
    Ответ написан
    Комментировать
  • Как работает заполнение одномерного массива по типу двумерного, если данные по идеи никак не меняются(добавляются или изменяются)?

    @dima20155
    you don't choose c++. It chooses you
    Вам стоит почитать об указателях.
    Размер массива очень даже важен.
    Вы создаёте массив, а затем пишите данные по указателю на массив с некоторым смещением. Фактически ничто не мешает вам писать что угодно и куда удобно (в пределах памяти, доступной вашей программе) и ничего вам за это не будет. В данном случае вы нагло пишите данные по указателю (который указывает на данные в области .data). данная область памяти значительно больше 1 байта и все, что вы туда записали будет храниться в ней. Проблема заключается в том, что массив имеет длину лишь 1 байт, а значит вы пишите в память, которая не принадлежит данной переменной/массиву, а принадлежит какой-то другой переменной и тем самым изменяете значение этой переменной.

    Заведите вторую переменную, скажем, mas2 чуть большего размера (главная, чтобы линковщик положил ее после mas.) И заполните ее каким-то полезными данными, а затем выполните свой код заполнения двумерного массива и распечатайте оба массива.

    Также можете попробовать создать массив в динамической памяти размером 1 байт, а потом заполнить своим кодом двумерный массив размера так 100х100 и получить классический SEGFAULT от операционной системы.

    К сожалению, уместить в 1 байт целый массив нельзя, а может оно и к лучшему.
    Ответ написан
  • Как исправить ошибку LNK2001 unresolved external symbol __imp_GetUserNameW C++?

    @dima20155
    you don't choose c++. It chooses you
    Вы настроили Linker перед компилияцией?
    Вероятно, самым простым способом будет выбрать другой тип проекта (desktop под windows)
    Или же настройте Linker самостоятельно (.lib + точка входа + тип приложения)
    Ответ написан
    1 комментарий
  • Как в c++ записать принадлежность х к множеству целых чисел?

    @dima20155
    you don't choose c++. It chooses you
    Всегда можно написать две перегруженные функции, первая принимает, например, int, а вторая char. Или же написать шаблонную функцию с ветвлением с std::is_same
    Ответ написан
    Комментировать
  • Как сделать чтобы пользовательский ввод не переводил строку?

    @dima20155
    you don't choose c++. It chooses you
    print("Enter number")
    while True:
        try:
            i = int(input())
            if i < 5:
            break
        except:
    Ответ написан
  • Как принять число любой длины?

    @dima20155
    you don't choose c++. It chooses you
    Используйте, например,
    vector<char> // или
    std::string
    Ответ написан
    Комментировать
  • MSVCP140.dll, что делать sfml?

    @dima20155
    you don't choose c++. It chooses you
    dll - Dynamic Link Library.
    либо вместе с exe файлом нужно также скачивать на другой компьютер нужные dll файлы (или, например, запаковать все в msi installer), либо использовать статическую линковку, чтобы не было этой зависимости.
    Ответ написан
  • Как написать функцию со списком python?

    @dima20155
    you don't choose c++. It chooses you
    isawasaw,
    def describe_pet(animal_type, pet_name):
        vowels=['a','e','i','o','u','y']
        if animal_type[0] in vowels:
            outputStr = f'\nI have AN {animal_type}'
        else:
            outputStr = f'\nI have A {animal_type}'
        print(outputStr)
        print(f"My {animal_type}'s name is {pet_name.title()}")
    
    describe_pet('eagle', 'oleg ')
    Ответ написан
    Комментировать
  • С++ На всех ли платформах одинаковая точность операций с float?

    @dima20155
    you don't choose c++. It chooses you
    Если вы пишите кросплатформенное ПО, то используйте платформонезависимые типы:
    int32_t, uint16_t, float32_t и так далее (также есть чуть более хитрый unsigned тип std::size_t).

    Это классический подход, которые используется много где. Даже если вы пишите ПО для 2-ух или 3-ех известных вам платформ, то будет хорошей практикой использовать подобные типы.
    https://en.cppreference.com/w/cpp/header/stdfloat

    float занимает 4 байта, double - 8 байт и на 32битной платформе и на 64битной:
    Ответ написан
    1 комментарий
  • Уменьшается ли используемая память программы?

    @dima20155
    you don't choose c++. It chooses you
    Сама переменная в фигурных скобках бесполезно.
    А если вы проводить какие-то манипуляции с переменными в отдельной области видимости, то это и есть то, что делают функции. Да, действительно, если все функции напрямую вставить в поле main и получить спагетти код, то помимо того, что у вас потребуется значительно больше памяти на стеке, так ещё вы будете хранить кучу ненужных переменных. К слову, стек имеет размер около 1МБ, что как вы догадыветесь только в контексте микроконтроллеров много.
    Ответ написан
    Комментировать
  • В Visual Studio можно ли поменять стандарт c++ по умолчанию?

    @dima20155
    you don't choose c++. It chooses you
    Комментировать
  • Чем заменить SFML?

    @dima20155
    you don't choose c++. It chooses you
    SFML можно установить для Visual Studio, но если вам не нравится сама идея того, что библиотека заброшена (хотя на github есть активность и готовится к публикации версия 2.6), то посмотрите в сторону SDL2. Вообще SFML довольно популярна, поэтому уверен, что вы сможете найти подробное описание танцев, для которых даже бубен не понадобится + всегда можно собрать из исходников либу.
    Ответ написан
    3 комментария
  • В чём отличия языка Си и С++? Зачем нужен Си?

    @dima20155
    you don't choose c++. It chooses you
    Начнем с того, что далеко не везде можно с лёгкостью примерять С++ в виду ряда ограничений. Также, довольно часто С++ неожиданно, может оказаться избыточным или ненужным для сфер, где необходим глубокий контроль над тем как система работает.

    Для встраиваемых систем у вас может возникнуть желание реализовать контейнеры самостоятельно, а тогда встаёт вопрос а зачем вам вообще заморачиваться с добавлением поддержки плюсов в свой проект.

    Ещё одной важной причиной может являться проблема с сертификацией: в МРТ аппарате или рентгеновской трубке требования к надёжности должны быть довольно серьезными, а, следовательно, необходимо доказать, что программный пакет (например, новую стандартную библиотеку из С++23) безопасно использовать в данной сфере.

    Динамические массивы удобнее писать на С? А если вам нужно хранить в массиве что-то сложнее int? Все равно будет также легко, как на плюсах? Сомневаюсь.
    Ответ написан
  • Arduino в python какие плюсы и минусы?

    @dima20155
    you don't choose c++. It chooses you
    Прежде всего я бы задался вопросом какая ваша задача/цель. Hello world/что-то такого же уровня сложности -> пишите на чем хотите, хоть на js. Если пишите для себя, то всегда можно купить слабенькую, но stm32, а то и простенькую OrangePi, которые стоят не сильно дороже, зато скорость выполнения кода куда выше, чем у Arduino (хотя есть нюансы). Хотите высокую производительность за минимум денег -> C/C++.
    Также вам нужно сравнивать не python, а micropython, это специфичная реализация python. Как минимум для исполнения кода, написанного на python нужна среда выполнения. Данное ПО не приносит вам никакого профита, а лишь забирает ваши ресурсы, которые у Arduino и так не много.

    Python не позволяет использовать все ресурсы железа. Например, о real-time, в полном смысле слова, можно забыть, а это одна из причин почему пишут под MCU.
    С другой стороны программы на python рабрабатывать значительно проще, что является неоспоримым преимуществом в ряде применений.

    Upd: Нашел пример сравнения (не знаю насколько корректное) MicroPython и C++.
    https://www.youtube.com/watch?v=u9UfKTOcYNs
    Ответ написан
    4 комментария
  • Как обработать txt файл чтобы на выходе получить массив или ещё один txt со всеми ссылками с определенным началом?

    @dima20155
    you don't choose c++. It chooses you
    функция re.findall
    https://docs.python.org/3/library/re.html
    Если вам вполне достаточно читать весь файл в память, то
    with open(fileName, "r") as f:
        outList = re.findall(r"https://steamcommunity.com/[^ ,;]*", f.read())
    print(outList) # можно сохранить в файл

    Почитайте регулярное выражение и поправьте его под свои нужды
    Ответ написан
    Комментировать
  • Использование шаблона в многофайловом проекте, как реализовано в vector например?

    @dima20155
    you don't choose c++. It chooses you
    Да, реализацию методов шаблонных классов необходимо помещать в заголовочный файл.
    Вы можете использовать следующий подход, который позволит вам разделить объявление и определение

    Foo.h

    template <typename T>
    struct MyStruct
    {
        void foo(T arg);
    };
    
    #include "Foo-inl.h"


    Foo-inl.h
    template <typename T>
    void MyStruct<T>::foo(T arg)
    {
        // some code
    }


    Также, если вы используете специализируете шаблонный параметр в определении методов класса методов, то такие методы можно поместить в .cpp файл.
    Ответ написан
    Комментировать
  • Что быстрее: создание вектора push_back или сначала объявление сколько в нем переменных, а потом заполнение?

    @dima20155
    you don't choose c++. It chooses you
    Зависит от того сколько элементов вы хотите добавить с помощью push_back, потому что если push_back резервирует дополнительное место под хранение данных, чтобы следующий push_back не выполнял длительную дополнительную аллокацию памяти. В общем случае, push_back работает медленее.

    При небольшом размере вектора (0-10 элементов) и большом количестве элементов, которые необходимо вставить в вектор (напр., 500) разница более значительна, потому что алгоритм оптимизации push_back выполнит несколько аллокаций за это время. На больших же значениях (напр., размер вектора 3 элемента, а необходимо вставить 100000) разница приближается к единицам процентов (судя по моим тестам ~2-5%)
    https://godbolt.org/z/9ThqYjP4o
    Ответ написан
    Комментировать
  • Почему scanf_s("%[^3]", str) при считывании символа '3' просто останавливается на этом символе, а не переходит к следующему?

    @dima20155
    you don't choose c++. It chooses you
    Потому что так реализовано:

    [set]
    matches a non-empty sequence of character from set of characters.
    If the first character of the set is ^, then all characters not in the set are matched. If the set begins with ] or ^] then the ] character is also included into the set. It is implementation-defined whether the character - in the non-initial position in the scanset may be indicating a range, as in [0-9]. If width specifier is used, matches only up to width. Always stores a null character in addition to the characters matched (so the argument array must have room for at least width+1 characters)


    Ссылка

    Если вам не нужно "зависать" на символе, то используйте другой формат, например %c, %s (симолы/строки)
    Ответ написан
    7 комментариев
  • Почему происходит SEGFAULT?

    @dima20155
    you don't choose c++. It chooses you
    Интересный случай.
    Стоит изучить как индексируется __m128.
    https://stackoverflow.com/questions/12624466/get-m...

    Upd1: Интересный факт. Кажется, что GCC не выравнивает __m128d
    Попробуйте __m128d_u
    https://godbolt.org/z/eqKd9v63n
    Ответ написан
    Комментировать