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

    Adamos
    @Adamos
    Это наследство С.
    Используйте STL - и const std::vector< int > mas = { 4, 5, 7, 9 };
    скомпилируется без проблем.
    Вообще, больше используйте STL и меньше - массивы и строки в С-стиле. Во всяком случае, пока не освоитесь в языке настолько, чтобы лезть глубже.
    Например, вопрос о константности указателя говорит о непонимании того, что на самом деле происходит в памяти.
    Ответ написан
    1 комментарий
  • Почему к итератору не прибавляется единица?

    Adamos
    @Adamos
    Итератор std::list - не итератор произвольного доступа, у него нет возможности перескочить несколько элементов, реализован только переход к предыдущему и следующему. Поэтому инкремент для него существует, а сложение - нет, и библиотека начинает искать по сусекам, к чему бы, реализующему сложение, его привести.
    К счастью, не находит ничего подходящего ;)
    Ответ написан
    Комментировать
  • Как написать цикл, чтобы рамка подбирала размер под текст на языке С++?

    Adamos
    @Adamos
    ДЛИНА = 0
    ДЛЯ КАЖДОЙ строчки из введенных пользователем
      ЕСЛИ ее длина больше ДЛИНЫ - записать ее в ДЛИНУ
    
    ВЫВЕСТИ "угол"
    ЦИКЛ от 0 до ДЛИНА + 2  ВЫВЕСТИ "горизонтальную линию"
    ВЫВЕСТИ "угол" и перевод строки
    ДЛЯ КАЖДОЙ строки из введенных пользователем
      ВЫВЕСТИ "вертикальную линию", пробел, строку
      ЦИКЛ от 0 до (ДЛИНА - длина этой строки + 1) ВЫВЕСТИ пробел
      ВЫВЕСТИ "вертикальную линию" и перевод строки

    Ну, и закрыть табличку аналогично началу.
    ЦИКЛы можно заменить генерацией строк нужной длины.
    Ответ написан
    Комментировать
  • Почему delete вызывает ошибку?

    Adamos
    @Adamos
    Главная ошибка - в нашей системе образования,где одни мудаки накропали методичек с использованием массивов и сишных строк в С++, а другие учат по ним третьих, и конца этому не видно.
    Хотя в этом коде достаточно было бы использовать string везде вместо char* - и при этом всем было бы легче: и ТС, и проверяющему, и компилятору... и никаких утечек с UB.
    Ответ написан
    Комментировать
  • Фабричный метод. Как создать рефлексивно по имени поля класс, наследуемый от абстрактного?

    Adamos
    @Adamos
    С++ - мультипарадигменный язык.
    Но компиляция логики на лету в нем не реализована, она свойственна скриптовым языкам и виртуальным машинам, но не машинному коду, в который собирается программа на С++.
    Поэтому выстраивание логики программы на С++ так, как вы ее описываете - это либо заведомо неудачный выбор инструмента для поставленной задачи, либо заведомо неверно поставленная задача.
    Ответ написан
    Комментировать
  • Как начать C++ с абсолютного нуля в IT?

    Adamos
    @Adamos
    С Питона - взяв любой бесплатный курс для начинающих.
    Переменные, ветвление, циклы и функции примерно одинаковы во всех С-подобных языках, но в С++ придется узнать еще кучку подробностей и нюансов, это дольше.
    А так ты буквально за пару недель сможешь начать понимать, как вообще программируют, и осознать, что тебе нравится не программирование, а игрушки...
    Если же вдруг зацепит и взбодрит - вторым номером начинай курс гугления и английского. Например, от запроса "C++ gamedev roadmap".
    Ответ написан
    1 комментарий
  • Где взять дорожную карту c++?

    Adamos
    @Adamos
    Какой именно интернет вы весь перекопали?
    Первая же строчка по запросу в гугле "unreal engine developer roadmap", например - не устраивает?
    Может, вам и не стоит в С++?..
    Ответ написан
    Комментировать
  • Что надо поменять чтобы переменные стали локальными вместо глобальных?

    Adamos
    @Adamos
    Перекинуть код объявления и заполнения mas внутрь main.
    Передавать mas как аргумент по ссылке в каждую из функций, его использующих.
    Ответ написан
    Комментировать
  • Реализация обоюдного включения файлов проекта?

    Adamos
    @Adamos
    Собственно, обычно на самом деле нет необходимости включать заголовки друг в друга.
    // file1.h
    #include "file2.h"
    
    // file2.h
    #include "file1.h"

    Так, конечно, не будет работать, но это и не требуется.
    // file1.h
    #include "file2.h"
    
    // file2.cpp
    #include "file1.h"

    Так и соблюдаются необходимые связи, и не возникает конфликта. Разумеется, если использован include guard.
    Ответ написан
    Комментировать
  • Как конвертировать указатель PWSTR в указатель на string (c++)?

    Adamos
    @Adamos
    std::string down(PWSTR pointer)
    {
      std::wstring w(*pointer);
      std::string s(w->c_str());
      return s;
    }

    Вот только то, что хочет std::string, может предполагать, что текст в ней будет в однобайтной кодировке, и если это элементы UI, например - кириллица после такого "преобразования" пойдет кракозябрами. Да и латинице может поплохеть.
    Так что, скорее всего, нужно не типы конвертировать, а кодировки.
    Ответ написан
    Комментировать
  • Почему при вычитании двух вещественных результат неправильный?

    Adamos
    @Adamos
    Для начала присвой эти значения переменным и выведи их - увидишь, во что на самом деле превратились эти числа в формате float.
    Если после этого будут вопросы - приводи код.
    Ответ написан
    4 комментария
  • Как решить проблему с исключением в моем коде?

    Adamos
    @Adamos
    Читаем документацию: что возвращает std::map.find(). И что - может вернуть.
    Ответ написан
    Комментировать
  • С чего продолжить изучение C++?

    Adamos
    @Adamos
    Изучив базовый синтаксис языка, стоит забыть о курсах и сайтах и написать пару-тройку программ.
    Да, говнокодом - это неизбежно. Но без этой практики говнокода никакого дальнейшего обучения не будет, хоть усмотрись видосиков и разорись на курсики.

    Сколько примерно до Jr учиться?

    - Сколько нужно времени, чтобы научиться не разбивать авиамодель при посадке?
    - Пять-шесть.
    - Чего? Уроков? Недель? Месяцев?
    - Самолетов.
    Ответ написан
  • Какой open source проект написан на труъ Си++?

    Adamos
    @Adamos
    Видимо, вы используете классы, но не используете ООП.
    Пишете плоско-процедурно, без выделения абстракций.
    Вам бы лучше на Java какой-нибудь опенсурс посмотреть. Ну, или почитать "Рефакторинг" Фаулера с примерами на той же джаве. Для смены парадигмы.
    Ответ написан
    Комментировать
  • Где взять офлайн установочник для gcc в убунте?

    Adamos
    @Adamos
    Установщиков под линуксами обычно не бывает, все ставится пакетами из репозитория.
    Но нюанс в том, что один пакет компилятора ни черта не даст, нужно выкачивать к нему все зависимости.
    Это в убунте может сделать, например, apt-rdepends.
    Ответ написан
    Комментировать
  • Будет ли большой std::vector быстрее, чем std::vectorstd::vector?

    Adamos
    @Adamos
    Да, будет.
    Ответ написан
    Комментировать
  • Как выводить строчку, на которой было выброшено исключение?

    Adamos
    @Adamos
    Вы идете поперек идеологии С++, предполагающей, что скомпилированный код будет делать только то, что реально нужно алгоритму. Для того же, чтобы делать еще кучу всякого на тот случай, когда надо будет показать горе-программисту, где он облажался - есть многие и многие другие языки.
    Право, если бы был простой и естественный способ сделать такую отладочную информацию - неужели вы думаете, что разработчики STL не использовали бы такую возможность?
    С другой стороны, исключение вызывается методом контейнера и в него передается строка. Можно же добавить в эту строку некоторые данные самого контейнера, которые могут быть полезны при исследовании ошибки - его реальную длину, тип, ошибочный индекс....
    Ответ написан
    Комментировать
  • Является ли хорошим решением разбивать большой класс на несколько .cpp файлов (C++)?

    Adamos
    @Adamos
    До появления IDE это могло считаться решением.
    Сейчас - никому не нужный и даже мешающий костыль.

    Собственно, класс на тысячи строк - сам по себе не проблема.
    А вот то, что его хочется раскидать по пяти файлам - явный намек на то, что для упрощения кода требуется рефакторинг.
    Ответ написан
    3 комментария
  • Почему в СТЕКЕ разрешается выделять достаточно мало памяти?

    Adamos
    @Adamos
    Большинство ресурсов выделяется динамически? Но ведь это намного дороже, чем в стеке.

    О дороговизне выделения памяти необходимо помнить, если это происходит часто: в цикле, в постоянно вызываемых функциях и т.п. Вряд ли вы области на многомегабайт выделяете миллионы раз в секунду. А если вы время от времени хапаете памяти мегабайтами и потом сравнительно долго работаете с ней - собственно затраты на ее выделение пренебрежимо малы.
    Ответ написан
    Комментировать
  • Как и на чем написать андроид приложение?

    Adamos
    @Adamos
    Qt
    Ответ написан
    Комментировать