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

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Почему код на C++ , отличается от кода на qt?

    Вопрос изначально неверно сформулирован. Надо было написать "от кода, написанного с использованием Qt". На ваш взгляд есть визуальные отличия, но это потому что Qt предоставляет свои API.

    Чтобы вывести Hello world! в c++ нужно : cout << "Hello world!" << endl;
    А в Qt (будем считать, что это рописано в функции кнопки): qDebug() << "Hello world!";

    Вариант с cout будет точно так же работать.

    И вообще является ли qt отдельным языком программирования(Если да, то где лучше всего почитать про него)?

    Нет, Qt -- это не отдельный язык программирования, а набор библиотек или фреймворк (зависит от того, как использовать) + набор инструментов.
    Однако же, для разработки UI, с Qt можно использовать отдельный язык, который называется QML. Но можно и не использовать.
    Ответ написан
    Комментировать
  • Какую версию стандарта учить/использовать в 2021 году?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Начиная с 11, потому что в сравнении с прошлым стандартом это практически другой язык. Всё что выше, на данный момент, просто удобные фичи. Ну кроме сопрограмм и модулей -- это не просто фичи, но это отдельная тема. А всё что ниже 11 стандарта, уже очень старо и неудобно.
    Ответ написан
    5 комментариев
  • Как вернуть разные типы из std::function?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Как вернуть разные типы из std::function?

    variant, any, void*

    Но в вашем примере просто надо явно указать тип лямбды и/или приводить все возвращаемые значения к одному типу, раз уж предполагается что одно всё равно копируется в другое.

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

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Есть довольно обширный набор инструментов ffmpeg. Советую использовать его, а уж UI делать на чём угодно. В любом случае, желаю удачи, так как видео редактор -- штука сложная.
    Ответ написан
    Комментировать
  • Сколько врмени должно занимать получение частоты слов из большого файла?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Невозможно ответить однозначно. Время в данном контексте зависит от многих факторов: алгоритма, вашего железа, компилятора, флагов сборки и т.п. То есть, время не говорит читателю вашего вопроса вообще ничего.

    В конце концов, если ресурсы позволяют, можно прочитать весь файл в какой-нибудь структуру типа словаря и получать частоту вхождения слова за O(1) или O(log n) в зависимости от того, какую струтуру вы выбрали. Тут время будет тратится на чтения файла и создание структуры данных, но один раз.
    Ответ написан
    Комментировать
  • На что указывает указатель, на бит или байт?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    На что укажет line на бит или байт? А может даже килобайт?

    В вашем коде, line -- это даже не указатель. Вот name -- это как раз-таки адрес в памяти, по которому находится объект line типа string.

    На всякий случай, байт -- минимальный адресуемый набор данных. То есть, бит из байта адресовать вы не можете.

    Советую читать что-нибудь по архитектуре и истории компьютеров параллельно или до книг по C++. Что-то по операционным системам тоже не помешает.
    Ответ написан
    2 комментария
  • Что не так с инициализацией массива?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    C++, не С. Хватит страдать, ну не пишут так уже давным давно. Вот, пользуйтесь:
    std::vector<std::vector<double>>  dots = { {0, 0},  {1.5, 2.5},  {2.5, 1.5},  {4, 3}  };

    Это просто работает. Равно как использование std::vector вместо одномерных массивов, или std::array, если размер известен заранее.
    Ответ написан
    Комментировать
  • Как думаете, так можно?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Да. Оператор = возвращает результат операции. Но выражение лучше в скобки возьмите.
    Первый же фрагмент кода не должен компилироваться, так как компилятор не может вывести тип переменной add2.
    Ответ написан
    8 комментариев
  • Какими способами можно организовать взаимодействие между разными программами?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Есть очень много способов и библиотек. Выбирайте, то что подходит вам для решения задач: https://en.wikipedia.org/wiki/Inter-process_commun... (секция Approaches).
    Ответ написан
    Комментировать
  • Как оптимально считать матрицу с консоли c++?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Если вы хотите оптимизировать программу по времени выполнения, то необходимо задать нужный размер матрицы с самого начала, так как он у вас известен. Например так:
    std::size_t r = 0, c = 0;
    std::cin >> r >> c;
    std::vector<std::vector<int>> matrix(r, std::vector<int>(c));

    Далее, у вас же просто числа, которые можно читать сразу в переменную:
    for (std::size_t i = 0; i < c; ++i)
    	for (std::size_t j = 0; j < r; ++ j)
    		cin >> matrix[j][i];


    Сразу скажу, я это не компилировал, не запускал и не проверял работает или нет. Если возникают какие-то ошибки, то пользуйтесь отладчиком.

    PS
    Первая ошибка в вашем коде заключается в том, что вектор g пустой в момент обращения по индексу. Замените [] на метод at() и получите исключение.
    Ответ написан
    Комментировать
  • Есть ли в С++ метод toString у классов?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Нет. Потому что в C++ действует правило "не плати за то чем не пользуешься" и нет рефлексии на уровне языка.

    Если вы хотите выводить класс в поток, то реализуйте: ostream& operator<< (ostream& os, const Foo &o), где Foo -- это ваш класс. Ну а если вам класс необходимо приводить к строковому представлению, то да, придётся вам реализовать метод руками, или же, что архитектурно более правильно, сделать отдельный класс и/или функцию для преобразования.
    Ответ написан
    3 комментария
  • Как составить условие для программы?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Из условия я вижу, что в коробке может быть только один предмет из списка. Следовательно, вам нужно выбрать 4 псевдо-случных элемента из последовательности. Сделать это можно многими способами. Например, можно просто случайно перемешать массив из всех доступных подарков и предложить пользователю выбрать индекс (номер коробки) от 0 до 3. Ну и вывести название подарка под указанным номером. Что-то вроде такого:
    std::vector<std::string> presents {"паук", "носок", "iPhone 11 Pro", "книга по С++", "футбольный мяч", "флешка", "билет в кино", "наручные часы", "кефир"};
    
    std::random_device rd;
    std::mt19937 g(rd());
     
    std::shuffle(presents.begin(), presents.end(), g);
    
    std::size_t boxNumber = 0;
    std::cin >> boxNumber;
    
    std::cout << presents[boxNumber] << std::endl;

    Тут, понятное дело, надо добавить интерфейсную часть и обработку ошибок ввода...
    Ответ написан
    Комментировать
  • Что же такое hex?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    В том, что endl добавляет перевод строки и делает flush буфера cout, а hex -- это манипулятор, для того чтобы переводить всё числа, которые идут после него в шестнадцатиричную систему исчисления.
    Ответ написан
    Комментировать
  • Есть ли в для C++14 map с поддержкой constexpr хэша?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Из коробки такого нет, насколько мне известно. Так можно сделать, но все входные данные должны быть известны на этапе компиляции. Довольно редкий случай на практике.
    Ответ написан
  • Как собрать библиотеку .lib [muParser]?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Так там же CMakeLists.txt в корне есть. Что-то вроде "mkdir build && cd build && cmake .. && make" (виндовый аналог этого) не работает?
    Ответ написан
    Комментировать
  • Почему возникает undefined reference?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Реализация методов шаблонных классов должна быть в заголовочном файле.
    Ответ написан
    1 комментарий
  • Почему все так рьяно говорят о том, что C++ ужасен и не нужен, но при этом он стабильно входит в топ 10 яп?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Почему все так рьяно говорят о том, что C++ ужасен и не нужен, но при этом он стабильно входит в топ 10 яп?

    Во-первых, не все. Во-вторых, аргументацию лучше спрашивать у тех, кто так считает. Ну и в-третьих, вам вероятно стоит переформулировать вопрос на что-то вроде: "какие существуют аргументы в пользу утверждения "С++ ужасен и ненужен"?". Но даже в случае изменения формулировки, аргументация будет, скорее всего, субъективной в такой постановке вопроса.

    PS
    Язык программирования -- это инструмент формализации модели. По факту, какой он там, не так уж и важно, в отрыве от контекста. Контекст, в данном случае, это решаемая задача и окружение.
    Ответ написан
    Комментировать
  • Как поступить с данным кодом переписать или можно оптимизировать?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Есть инструменты профилирования. Они могут помочь вам найти узкое место. Только не забудьте релизную сборку использовать.
    Ответ написан
    Комментировать
  • Почему C++ не видит функцию, находящуюся под другой?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Просто добавьте int foo(); выше bar, а реализацию оставьте как есть.
    Слово static тут не нужно, можете удалить.
    Ответ написан
    Комментировать
  • Как передать json buffer как аргумент функции в ArduinoJson 6?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Похоже что тут размер должен быть известен на этапе компиляции. Проще передать в функцию не размер буфера, а скажем сам буфер, или сделать функции шаблонный параметр с размером буфера.

    Ваш вариант с переменной не подходит, потому что её значение на этапе компиляции не известно.

    Можно ещё попробовать DynamicJsonDocument его размер можно указать в рантайме, согласно документации.
    Ответ написан
    Комментировать