• Найти самое часто встречающееся слово в тексте. Ввод слов в динамический массив. Как сделать без map?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Найти/сделать ассоциативный контейнер. Думаю, реализаций деревьев бинарного поиска на С предостаточно. Ещё можно простую хэш-таблицу на коленке сделать, наверно это даже проще. Просто с обычным линейным поиском по массиву у вас очень долго программа работать будет.
    Если реальный проект, а не просто задача для саморазвития, то однозначно искать готовые реализации.
    Ответ написан
    Комментировать
  • Плохо ли то, то у меня некоторые commit-message в Git не особо содержательные? И вообще эти сообщения важны только когда я делаю push? Или всегда?

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

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    1) Ваш оператор хэширования просто не скомпилируется. Вы пытаетесь разложить пару на три аргумента.
    2) В операторе хэширование не совсем правильное комбинирование хэшей. Посмотрите как boost::hash_combine сделан, например.
    3) Проверьте, а точно ли одинаковые типы. А ещё лучше создавайте псевдонимы для всех длинных типов и используйте их.
    4) В принципе всё должно работать, и возможно проблема в среде/флагах. Возьмите онлайн компилятор, например godbolt.org и попробуйте откомпилировать там.

    PS
    Надеюсь, что вы просто экспериментируете, а не пишите реальный проект. Такое использование кортежей -- оверкилл.

    PPS
    И английское произношение тАпл.
    Ответ написан
  • Причины утечек памяии?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Открыли виртуальные деструкторы? Прекрасно! Пришло время открыть умные указатели. Простое правило для новичков: вообще никаких явных new и delete, всё везде передаётся и возвращается с помощью умных указателей (конст ссылок на них). Потом уже можно почитать/посмотреть Саттера, и начать что-то передавать по ссылкам или голым указателям. Но это уже следующий уровень.
    Ответ написан
  • При инициализации массива строк в объекте появляется ошибка "too many initializers for 'String [0]'". В чем может быть проблема?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Потому, что это запрещено стандартом. Укажите размер массива или используйте std::array.
    Советую добавить следующие флаги компиляции: -pedantic -Wall -Wextra.
    Ответ написан
    Комментировать
  • С++ - как отсортировать структуру?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    https://en.cppreference.com/w/cpp/algorithm/sort
    Вас интересует вот эта часть:
    std::sort(s.begin(), s.end(), [](int a, int b) { return a > b; });
    Ответ написан
    1 комментарий
  • Умные указатели, создание в цикле или что использовать вместо них?

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

    Не вижу никаких преград для использования в циклах.

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

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

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

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    QImage::convertToFormat
    Ответ написан
    Комментировать
  • Как ограничить доступ в чужую память (C++, MS Visual Studio)?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Да можно. Но для того надо использовать std::vector или std::array, метод at(). Смотрите документацию, там написано как.
    К слову, компилятор вам не помешает писать за границы массива. Это вам не Rust. Но это UB в C++ и делать так не стоит.
    Ответ написан
    Комментировать
  • Как достигнуть стабильности ABI?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    По-моему, самый стабильный способ -- это сделать простой C интерфейс у либы и предоставить обёртки на C++, которые пользователь вышей либы уже сам будет компилять. После этого, все ваши проблемы решаться :)
    Другое решение -- дождаться 23го стандарта, где, по слухам, ABI C++ стандартизуют. Но это очень оптимистичное ожидание.
    Ответ написан
  • Как отправить request headers Cookie в Qt?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Посмотрите внимательно, что возвращает QVariant::toList.
    Вам надо преобразовывать явно:
    request->header(QNetworkRequest::CookieHeader).value<QList<QNetworkCookie>>()


    PS
    Эта конструкция устаревшая: qVariantFromValue. Используйте QVariant::fromValue().
    Ответ написан
    3 комментария
  • Современный C++ для программиста C#?

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

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Советую зайти в документацию и прочитать про типы итераторов и что это такое.
    Ответ написан
    Комментировать
  • Как заставить заработать отправку запроса в готовом приложении Qt?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Как вы определили что он не отправляется? По статусу ответа сервера или просто угадываете? Метод get возвращает doc.qt.io/qt-5/qnetworkreply.html. Там можно посмотреть ошибку, если она есть, подождать завершения запроса, и прочитать ответ.
    Ответ написан
    1 комментарий
  • Почему компилятор не пропускает Unicode?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Я бы на вашем месте стандартный wchar_t использовал и выводил бы значение в wcout.
    Ну и флаги компиляции возможно стоит подкрутить для WCHAR Вот этот флаг, кажется /Zc:wchar_t.
    Ответ написан
    Комментировать
  • C++ - как заполнить динамический массив элементами меньше 6 из другого динам. массива?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    У вас же C++:

    #include <algorithm>
    ...
    
    std::copy_if(std::begin(srcArray), std::end(srcArray), std::begin(dstArray), 
                 [](auto && elem) { return elem < 6; });


    Ну там back_inserter в случае вектора может быть. Кстати, в С++ надо использовать vector или array.
    Как сделать генератор случайных чисел можно посмотреть тут: www.cplusplus.com/reference/random/.

    Итого, ваша задача сведётся к 4-5 строчкам кода.
    Ответ написан
    Комментировать
  • Какой выбрать стек для работы в GameDev?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Если цель -- это именно работа в компаниях уровня Близзард, то я бы советовал следующие:
    1) Поступить в технический университет в Мск или Спб (а ещё лучше в США или Европе), на специальность связанную с математикой, информатикой или разработкой ПО. Почему эти города? Всё просто: больше возможностей. Больше конференций и прочих мероприятий, больше компаний, ближе к развитым странам (привет программам по обмену студентами), да и уровень жизни в целом выше.
    2) Действительно учиться в этом университет и не забывать заводить полезные знакомства.
    3) Учить английский, желательно до уровня "свободно говорю".
    4) Начиная со второго курса ходить на летние стажировки в крупные и не очень компании, которые занимаются разработкой игр (если повезёт найти такие, если не повезёт, то подойдут любые другие). Рассматривать в том числе и международные компании. Этот пункт очень важен, пожалуй, он даже самый важный.
    5) Читать книги, которые вам перечислили (https://github.com/miloyip/game-programmer) и работать над своим проектом/проектами.
    6) Да, вам нужен С++, но это не основной навык, есть ещё немало составляющих, которые вы приобретёте проходя стажировки, читая книги и работая над своим проектом.

    Вообще, это универсальный набор советов, который можно применять для становления профессиональным разработчиком в любой отрасли, будь то игры, финансы, компьютерная графика и т.д. Если вам сейчас 16, то, следуя рекомендациям, годам к 25 у вас есть все шансы стать состоявшимся и востребованным специалистом.
    Ответ написан
    Комментировать
  • Какие есть на C++ фрейморки для веб как Laravel на PHP?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Кое-какие вещи есть, но я бы не сказал, что ими активно пользуются в промышленной разработке. А причина проста: C++ предоставляет слишком много контроля, и слишком сложен, в сравнении с популярными для веб языками PHP, Python, Ruby и т.п. Помимо этого, он ещё и компилируемый, без рефлексии из коробки, с проблемами с ABI и т.д. Т.е. придётся преодолевать много трудностей и учиться многим вещам, при весьма сомнительной пользе для веб.
    Разумное использование, это например писать какие-то расширения на стороне сервера, или расширения к БД. Но только не фреймворки вроде RoR.
    Ответ написан
    Комментировать