Ответы пользователя по тегу C++
  • Как переобразовать string в const unsigned char* в C++?

    Adamos
    @Adamos
    Вообще-то для сравнения std::string с C-строкой лучше не вытаскивать указатели из string, а использовать ее std::string::compare.
    Ответ написан
    Комментировать
  • Как скомпилировать приложение для Windows в Qt Creator на MacOS?

    Adamos
    @Adamos
    Теоретически достаточно поставить MXE и прописать соответствующий компилятор в QtCreator. Под Ubuntu я себе собрал такую среду и спокойно компилирую EXE-шники, просто переключившись на другую схему сборки в QtCreator.
    Как там с OSX на практике - не пробовал и не завидую новичку, которому понадобится разобраться с этой кухней...
    Ответ написан
    1 комментарий
  • Как программным методом удалить одну из итераций цикла for?

    Adamos
    @Adamos
    Решается проблема XY.
    Тут в принципе не имеет смысла for, а нужен while(vector.size() < 5)
    Шаманство с индексом цикла - плохая практика, она аукнется в новых стандартах, например.
    Ответ написан
    Комментировать
  • Какую книгу выбрать для изучения алгоритмов и структур данных?

    Adamos
    @Adamos
    Бестселлер "101 вопрос на Тостере, которые новички даже не пытаются поискать".
    Ответ написан
    Комментировать
  • Как изучить основы программирования для последующего изучения С++?

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

    Тщательная подготовка к тому, чтобы наконец заняться тем, чем собираешься заняться - это один из видов прокрастинации.
    Ответ написан
    4 комментария
  • Правильно ли я описал передачу параметров из функции С++?

    Adamos
    @Adamos
    целочисленных указателя
    WRONG. Таких не бывает.

    Инициализируем 4 переменные
    WRONG. Читаем, что такое инициализация в С-подобных языках и чем она отличается от объявления.

    как я понял, ссылки на две переменные также передаются в параметр
    WRONG. В функцию они передаются, а не в параметр. В остальном верно ;)
    Ответ написан
    Комментировать
  • Через какой алгоритм решать эту задачу?

    Adamos
    @Adamos
    Когда не знаешь, как решать задачу программно - это нормально.
    Надо взять листочек и начать решать ее руками.
    12 этаж, есть два варианта - вверх или вниз. Считаем их, получаем этажи, на каждом два варианта...
    Внезапно доходит, что если уже рассматривал варианты для этажа, то второй раз это можно не делать, результаты будут те же.
    Значит, помечаем посещенные этажи - и крутим варианты, отсекая те, которые ведут на уже посещенные.
    Банальной рекурсией, например...
    Из кода осталось только написать функцию, которая выдаст два варианта для текущего номера этажа - по подробной инструкции из задачи.
    Ответ написан
  • Почему перемещение объявления и инициализации переменной на новую строчку кода влияет на результат работы программы?

    Adamos
    @Adamos
    Я правильно понял, если после объявления неопределенной переменной X начать объявлять или менять значения другим переменным, то X "засорится"?

    Наоборот.
    int i;
    Под переменную i выделен участок стека, лежащее в нем значение не меняется. Но в учебной программе из пары строк там, скорее всего, будет 0, и это создаст иллюзию, что все нормально. Кроме того, некоторые компиляторы в некоторых условиях инициализируют любые переменные, что еще больше запутывает ситуацию.
    int i;
    for(int n = 0; n < 10; ++n) {}

    Под переменную i выделен участок стека, лежащее в нем значение не меняется.
    Под переменную n выделен следующий участок стека, его изменение никак на i не сказывается.
    for(int n = 0; n < 10; ++n) {}
    int i;

    Под переменную n выделен участок стека, его значение к концу цикла равно 10 - и уже ненужная переменная n уничтожается, освобождая место в стеке.
    Под переменную i выделен участок стека, лежащее в нем значение не меняется. Это вполне может быть тот самый участок, который только что освободился, в нем записано 10 (С++ не выполняет ничего, что явно не указал программист - это оптимальный язык). Так что i вполне может равняться 10. Или нет.

    Подобные ситуации называются "неопределенным поведением".
    Программист на С++ обязан исключить их из своей программы.
    Ответ написан
    1 комментарий
  • В чем преимущества использования С++ в embedded?

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

    Конкретно embedded тут неважен, просто сейчас даже встройка стала достаточно богатой ресурсами, чтобы иметь возможность сместить баланс "оптимальность-гибкость" и "компактность-читаемость" вправо.
    Ответ написан
    2 комментария
  • Как из первых N натуральных чисел составить максимальное количество пар, суммы которых являются простыми?

    Adamos
    @Adamos
    Подозреваю элементарное: под конец цикла остаются два числа, которые при сложении дают не простое, но больше их комбинировать не с чем. Задача-то переборная, а тут один проход без возвратов.
    Ответ написан
  • Почему мой код не проходит по времени?

    Adamos
    @Adamos
    А почему, собственно, 11? Или вам сумму КОЛИЧЕСТВ делителей надо? Судя по коду, да.
    Тогда на хрена, собственно, вообще заполнять сет? Что мешает заменить эти вставки простым kol++?

    Не говоря уже о том, что задача, полагаю, гораздо эффективнее решается не перебором чисел, а перебором их потенциальных множителей (подсчетом, сколько раз кратные им числа попадут в заданный диапазон).
    Ответ написан
  • Является ли безопасным отнять от указателя 1 и итерироваться по массиву [1,N], а не [0, N-1]?

    Adamos
    @Adamos
    Такие мелкие фокусы, ломающие читающему голову, небезопасны, если сопровождающий ваш код знает, где вы живете.
    Ответ написан
    2 комментария
  • Почему не выводит остальные элементы при работе со списком в C++?

    Adamos
    @Adamos
    // создание ещё пяти

    Один поверх другого ( original->next = newNote; ) вместо записи каждого из них после предыдущего.

    while (tempNote->next != NULL) {

    Исключает последний элемент (у него уже нет следующего), а в списке всего два элемента (см. выше).
    Ответ написан
    1 комментарий
  • Как убрать предупреждение от Visual studio?

    Adamos
    @Adamos
    Достаточно загуглить номер ошибки, чтобы из гугля посыпались "Code analysis false positive - C6386". Баг это.
    А весь приведенный код нужно выбросить и заменить восемь строчек говнокода на один push_back стандартного вектора.
    Ответ написан
    Комментировать
  • Как читать книгу Вирт, Алгоритмы и Структуры данных школьнику?

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

    Adamos
    @Adamos
    Боюсь, предыдущие ответы не развеивают магических фантазий, попробую это сделать.
    Private означает инструкцию компилятору: при сборке проверить, что нигде в коде нет обращения к этому члену вне этого класса.
    Protected - аналогичная инструкция, но ограничение расширяется на наследников этого класса.
    Public - отсутствие таких проверок.

    Ни к какой защите информации в рантайме эти вещи не имеют отношения от слова вообще, машинный код не меняется ни на байт.
    Ответ написан
    Комментировать
  • Как извлечь элементы многобайтового массива как единое число?

    Adamos
    @Adamos
    Если в этих элементах биты и байты реально в том порядке, в котором нужно - банальный reinterpret_cast< ULL* >(&arr[1]);
    Ответ написан
  • Почему код не проходит по тайм лимиту?

    Adamos
    @Adamos
    Функции работы со строками будут постоянно выделять память, это дорогая операция.
    Ваша задача, в сущности, не требует такого выделения.
    Достаточно завести два массива длиной в строку, заполнить первый числами по порядку и при каждой итерации заполнять другой перестановкой, а потом менять их местами.
    В конце составить строку по получившимся индексам символов.
    Это будет однозначно быстрее за счет стабильной памяти (в сущности, вообще не будет обращаться к памяти, все будет крутиться в кэше процессора).
    Ответ написан
  • Можно ли в c++ реализовать new() с c#?

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