Ответы пользователя по тегу C++
  • C++ шаблон в шаблоне как?

    @Koss1024
    QueueList<listStruct<int> > queue;

    не забудьте пробельчик перед последним '>'
    (в С++ 11 пофиг)
    Ответ написан
    Комментировать
  • Есть ли сертификационные программы по языку C/C++?

    @Koss1024
    Я не смотрю на сертификаты и почти не смотрю в резюме пытаясь нанять С++ Senior
    Не тратьте время

    Лучше просто станьте профессионалом
    Ответ написан
    1 комментарий
  • Как передать двумерный массив в функцию в виде параметра в C++?

    @Koss1024
    Нужно понимать, что массив в С = указатель на память
    Соответственно двумерный массив = это указатель на память и еще понимание сколько элементов в каждой строчке таблицы

    a[m][n] тоже что *(a+ sizeof(type)*n + m)

    Именно поэтому при передаче параметров в функции нужно явно указать количество элементов в строке
    void foo(float arr[2][2])
    void foo(float arr[][2]) // или так достаточно
    Ответ написан
    Комментировать
  • Почему обнуляется статический член класса?

    @Koss1024
    weak_ptr не владеет объектом
    объект указателя будет уничтожен кем-то из вне. А именно когда все shared_ptr объекты будут уничтожены

    На самом деле код весьма запутан.
    Из за того что у вас есть friend не возможно ничего сказать о безопасности приватных конструкций
    Без кода класса менеджера вообще ничего не понятно.

    Скорее всего вы сами его и обнуляете в менеджере не созданным объектом.

    Совет: используйте SRP не объединяйте сущности
    Counter должен считать и не следить за тем кто теперь текущий
    A какой нибудь CurrentCounter - статический член, глобальная переменная или синглтон - отдельный объект

    и проблем не будет

    ----

    Все же я дополню

    такой код всегда получается из-за чрезмерного увлечения паттернами, без понимания зачем они нужны.
    сформулируйте лучше задачу свою поточнее, мы вам поможем с архитектурой.

    Что вы хотите от этого счетчика? Зачем он нужен? Зачем переключать глобальный текущий?
    Какую задачу он решает?

    Я серьезно. Вопросы архитектуры очень важны.
    Ответ написан
  • Как понять конструкцию "указатель на указатель"?

    @Koss1024
    Вот с картинками.
    cppstudio.com/post/9555
    Ответ написан
    Комментировать
  • Что необходимо знать для написания чата на С++?

    @Koss1024
    Для IPC попробуйте xтото более современное DBus например или из того же boost
    Потоки С++ 11 threads (Concurrent programming in action C++ book) или boost threads
    А как он может быть консольным если игра графическая?
    Ответ написан
  • Как справиться с неправильным нулем в C++?

    @Koss1024
    Это https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D...

    Нужно понимать принципы работы чисел с плавающей точкой если вы работаете с математикой
    Именно поэтому такие числа напрямую не сравнивают, а сравнивают разность по модулю с eps
    if(abs(a-b) < 1e-10) // то числа равны число не совсем от балды
    при обращении матриц порядок погрешности можно вычислить для маленьких и хорошо обусловленных матриц это весьма точно. Но чаще это число куда меньше

    Следующая проблема которая у Вас возникнет плохое обращение
    Читайте про число обусловленности матрицы

    Кстати говоря обратную матрицу так искать дело неблагодарное :)
    Численные методы алгебры вам в помощь

    Самый простой для понимания LU разложение и его PLU модификация
    Практически применяют разные для разных задач. Как правило о матрице что-то известно заранее
    Ответ написан
  • Как выучить c++?

    @Koss1024
    Я дам ссылку на свой же ответ. Там очень много расписано
    Как восстановить знания по C++ на сегодняшний день?
    Ответ написан
    Комментировать
  • Какой язык программирования выбрать?

    @Koss1024
    С++ разработчик яву выучит всегда
    Явист С++ выучить может не каждый

    С++ огромный порог вхождения
    Ответ написан
  • Как запустить system с нюансами?

    @Koss1024
    1. Отследить можно по коду возврата функции system это и будет тот самый return который в main написан 1

    2. на С++ 11 породить поток можно для система
    в С++ 03 std::system("start command") // под винду

    Общим решением будет использовать кросплатформенную либу
    boost::process
    boost::filesystem
    вам помогут
    Ответ написан
  • Как восстановить знания по C++ на сегодняшний день?

    @Koss1024
    0. Прочитайте Страуструпа последнее издание (англ). Если язык вы знали то это лучшая книга чтобы обновить знания

    1. C++11 C++14, в производстве чаще пока еще С++03
    2. Лучший компилятор clang++ (поддерживает любой стандарт и любую платформу)
    3. boost это набор библиотек на все случаи жизни самый хорошо сынжинереный. Стоит писать не под него а с использованием
    4. пункт 3
    5. C++ для задач требующих точного понимания стоимости каждой операции, это embedded DSP Server computing
    Math много чего еще

    Учтите, С++ это инструмент который нужно учить постоянно

    Дополню
    -----------
    С++ мультипарадигменный
    А так же много уровней абстракции поддерживает

    На нем можно писать как на чистом С - это самый низкий уровень
    Можно ООП и абстракции
    Можно паттерны
    А можно функциональный стиль

    С С++ в этом и проблема что знать нужно очень много.

    Я могу сказать что я читал на протяжении своей карьеры
    Прежде всего я умел программировать и имел представление об алгоритмах и модели памяти
    (что такое указатели, алокация удаление и т д)

    Сначала я почитал какую-то левую книжку и изучил его на уровне новичка. Написал проект библиотека линейной алгебры (это было еще в универе, задача была актуальна для меня) В принципе здесь моих знаний хватало чтобы стать джуниором, но я такой подход не люблю

    Потом Страуструп (тогда это было издание по стандарту 03). Здесь я дополнил свои знания деталями которые пропустил при самостоятельном изучении. Тут стоит отметить что Страуструп весьма странная книга и написана тяжело. Секцию же ООП вообще там лучше не читать (самая последняя).

    Где-то рядом я прочитал Гради Буч - ООА и ООП с примерами применения. Очень хорошая кика чтобы понять к чему все это придумали вообще. Сильно выправляла мозги

    Потом был Керниган и Ричи Язык программирования С. Эту я прочитал просто от безделья, но теперь считаю что это было необходимо. Здесь можно понять зачем придумали именно С. И насколько там все просто, задумано.

    Следом пошли техники: Герб Саттер Решение сложных задач на С++ и Новые сложные задачи С++
    читать обязательно, разобрано много костылей и проблем языка. Дано очень много дельных советов

    С Мейерс - Эффективное использование С++ туда же. Прекрасный разбор.

    Макконнел - Совершенный код. Очень крутая книга. Она отшлифует уже почти бриллиант.

    Помимо всего прочего я работал над проектами и постоянно читал всяческие форумы, блоги, дискутировал с коллегами. Решал задачки разных собеседований.

    Отдельного внимания заслуживает книга Банды четырех (Паттерны).
    Я ее с трудом дочитал, читал ее я уже аж после всего перечисленного и после примерно 7-8 лет опыта С++.
    Я уже давно был Senior dev. и наконец нашел таки время и для нее. Она мне показалась до ужаса скучной и очевидной, поскольку почти все предложенные решения я придумывал и сам неоднократно. Кроме того, большинство этих решений неоправданно тяжелы, и очень запутывают код. Тема холиварная и спать надо много, но я пожалуй остановлюсь только на том что в моей практике, худшими с точки зрения цены ошибок были разработчики которые учились начиная с этой книги. Их код недодерживаем запутан и очень плохо поддается рефакторингу. Такой код имеет самые долго отлеживаемые ошибки.

    Где-то рядом я прочитал Фаулера - Рефакторинг. Вполне себе неплохо. Рекомендую. Но тут стоит к опытному коллеге обратиться. Идея то проста Тесты - Маленькие комиты - YAGNI KISS и SRP но детали лучше познавать на практике.
    У меня был хороший лид, который меня в конце концов научил :)

    Совсем забыл! Александреску же! Скажем так - не так страшен Александреску как тот кто его начитался :)
    Фана доставил много, а так же дал возможность на эти игрища потерять около 3-х месяцев работы. Даже не знаю
    стоит ли читать. Наверное стоит, но нужно помнить что на практике лучше не использовать если вы уже не эксперт.

    Остальное С++ не касается, но чтобы стать профессионалом Вам потребуются алгоритмы и структуры данных (Кормен, Кнут), многопоточность (Энтони Уильямс), другие языки(питон, JS, java), оптимизация и профилирование.
    и много много разных специфических знаний

    Удачи Вам в этом нелегком но, безусловно, интереснейшем пути :)
    Ответ написан
    7 комментариев
  • Эффективное использовование STL (C++). Как написать программу не используя циклов?

    @Koss1024
    #include <iterator>  // istream_iterator
    #include <map>
    #include <algorithm> // transform
    #include <string>
    #include <locale> // tolower
    
    // Input file looks like this:
    /* text.txt
    You wanna play a little game?
    Check this out.
    */
    
    using namespace std;
    
    typedef map<string, string> Vocabulary;
    Vocabulary vocabulary;
    
    string translator(string word)
    {
       transform(word.begin(), word.end(), tolower); // locase
    
       Vocabulary::const_iterator trans = vocabulary.find(word);
       return vocabulary.end() != trans ? *trans : word;
    }
    
    void translate_file(string fin, string fout, const Vocabulary& vocabulary)
    {
       ifstream in(fin);
       ifstream out(fout);
    
       istream_iterator<string> original_words(in);
       istream_iterator<string> eof;
    
       ostream_iterator<string> tranlated_words(out, " ");
    
       transform(original_words, eof, tranlated_words, translator);
    }
    
    
    int main()
    {
       
       vocabulary["you"]    = "vy";
       vocabulary["wanna"]  = "hotite";
       vocabulary["game"]   = "igra";
       // ...
    
       translate_file("text.txt", "translated_text.txt", vocabulary);
       return 0;
    }
    Ответ написан
  • Как организовать построение пирамид изображений?

    @Koss1024
    Это уже очень большое изображение. Стоит его разбить на тайлы со стороной степени двойки
    И их использовать как основание пирамиды.

    Элементарной интерполяций получить тайны вчетверо меньше и т/д

    Собсно все

    Но только мне кажется что я неправильно понял вопрос поскольку это весьма очевидно :)
    Ответ написан
    Комментировать
  • Стоит ли использовать private static функции в C++?

    @Koss1024
    На самом деле ответ неоднозначен. И важны критерии

    Если мы говорим о функциях реализующих что-то но не требующими доступ к закрытой части класса, то зачем их в классе объявлять, пусть просто в cpp-шнике валяются (если они никому снаружи не нужны)

    Важно понимать, что чем меньше кода тем лучше, и чем тоньше интерфейс класса тем лучше
    если при этом функционал выполняется. (в разумных пределах)
    Поэтому лишний код в виде объявления функции в заголовке это плохо.

    Однако если доступ таки нужен (что скорее всего результат не лучшей декомпозиции) то конечно да

    Это не вопрос стиля. В С++ тоже можно и нужно писать функции. Это не Java.
    Ответ написан
    Комментировать
  • Необходимо получить первые N наиболее встречающиеся слова в текстовом файле?

    @Koss1024
    А что подсказать? В чем вопрос?

    Или написать за Вас код?

    Алгоритм прост:
    Читаем слова из файлового потока и собираем в map примерно так

    ifstream fs("filename.txt");
    map freq; // частоты файлов
    string word;
    while(read_next_word(fs, word)) // read and skip spaces tabs etc... (тут логика пропуска ненужных символов)
    {
    transform(word.begin(), word.end(), word.begin(), tolower); //lowercase
    freq[word]++; // увеличиваем счетчик для нашего слова
    }

    теперь у нас есть частоты всех слов в мапе скопируем ее в вектор и отсортируем по частотам

    vector > vocabulary(freq.begin(), freq.end());
    sort(vocabulary.begin(), vocabulary.end(), less_second); // можно лямбдой будет проще если можно с++11

    Слова в контейнере vocabulary отсортированы по частоте и делать с ними можно что угодно

    где
    bool less_second(const pair& a, const pair& b)
    {
    return a.second < b. second;
    }

    Это действительно весь код. (кроме логики пропуска символов, но там все просто по моему)
    Ответ написан
    Комментировать
  • Как правильно распарсить запись функции и какие структуры данных использовать для ее хранения?

    @Koss1024
    Алгоритм известен более чем
    https://ru.wikipedia.org/wiki/Алгоритм_сортировочн...
    Пример в статье заменяем на названия функций и все. Если речь не идет о просини выражений дополнительно.

    Вопрос точно по С++? Поскольку запрос с сервера здесь выглядит слегка неуместно
    Всему свой тул
    Ответ написан
    Комментировать