Ответы пользователя по тегу C++
  • Какие языки позволяет связывать с C++ компилятор gcc?

    @Dvvarreyn
    В конструкции extern "C" "C" — это не язык Cи, а способ передачи аргументов и адреса возврата.
    Один и тот же язык может выдавать разный код вызова функций.
    Возможность связывания определяется не языком, а тем как определена вызываемая функция и настойками компилятора.
    Без специальных указаний компиляторы Cи далеко не всегда выдают для функций код, соответствующий стандарту передачи аргументов, необходимого для extern "C".
    Ответ написан
    Комментировать
  • В чем разница между ссылкой на объект и член-данных объекта?

    @Dvvarreyn
    Предположения:
    • оператор & не перегружен.
    • Вывод в поток не определён для объекта .n_Name каким-то фантасмагорическим образом.


    В определении функции указан способ передачи аргумента. Указано, что он передаётся по ссылке, но это техническая деталь, формально же при этом внутри функции с — это не адрес, а сам объект.
    Если нужно передать адрес, то в описании должна быть *
    constructor_and_d_and_c::constructor_and_d_and_c(const constructor_and_d_and_c* c)


    В объекте может быть несколько полей данных. Адрес первого поля и объекта обычно совпадают.

    & в теле функции означает взятие адреса. Код
    cout << &c;
    выдаст адрес объекта.

    Код
    cout << &c.n_Name;
    выдаст адрес поля, и, возможно, он совпадёт с адресом c.

    Судя по тому, что происходит. n_Name — это адрес памяти, которая выделяется для размещения строки. Не совсем понятно, зачем так сделано, можно было сделать полем класса строку напрямую, а не адрес на неё. Но так или иначе, у переменной содержащей адрес, тоже есть адрес.
    Поэтому
    cout << c.n_Name;
    выдаёт какой-то адрес. Но это не адрес объекта с или поля c.n_Name. Это адрес динамически выделенной памяти под строку.

    n_Name = new string(*(c.n_Name));
    По адресу строки с помощью * получаем объект-строку, далее создаём новую строку, адрес пишем в n_Name.
    Ответ написан
    Комментировать
  • Как правильно переписать часть кода с Python на Си?

    @Dvvarreyn
    Множества (set) нужно использовать и на c++, и на питоне.
    Считать оба файла в множества, взять пересечение, и распечатать.
    Ответ написан
    Комментировать
  • Что посоветуете для изучения C++?

    @Dvvarreyn
    Честно говоря, хотя я и считаю, что для серьёзных проектов плюсы подходят лучше всего, в данном случае я бы стал делать на Visual Basic под Excel. Ну или на Python (вы знает js, значит вам будет проще на js) под LibreOffice Calc.
    В качестве формы была бы сам таблица, с описанием какое поле зачем.
    И кнопка рассчитать, которая заполняет недостающие поля.

    И вообще, в данном случае я вот совсем не уверен, что под имеющиеся требования нужно будет какие-то макросы писать, а не просто запретить часть полей для редактирования и вбить в них готовые формулы.
    Ответ написан
    Комментировать
  • Не удаляет int в векторе через итератор, как исправить?

    @Dvvarreyn
    {
    return false;
    }

    Это что?
    Или из-за оформления там if побился?
    При текущем оформление вообще не очевидно, что до цикла функция может дойти.
    Ответ написан
    1 комментарий
  • Чем отличаются две реализации strlen()?

    @Dvvarreyn
    Понятием длины отличаются.
    Если результатом индексировать строку, то в первом случае получим первый встретившийся '\0', а во втором — элемент перед первым '\0'.
    Ответ написан
    Комментировать
  • Как разбить массив на два подмассива?

    @Dvvarreyn
    Если в данном случае возможно mozgless-решение, то к целочисленной линейной задаче удовлетворения ограничениям можно свести.
    Если порядок не важен (то есть не на левую и правую части, а на какие угодно части), то по сути, для заданного
    С \in R^n
    нужно найти
    x \in {0, 1}^n
    такой, что
    sum_i с_i(2x_i-1) = 0
    И дальше подсунуть в какой-нибудь солвер, например, GLPK, COIN-OR CBC или SCIP.
    Ответ написан
    Комментировать
  • Как сделать параллельное выполнение нескольких функций?

    @Dvvarreyn
    Один поток сортирует другой преобразует? Или параллельная сортировка, и параллельное преобразование?
    Если второе, то я начал бы с того, что описал как я представляю параллельное решение в этом случае, потому как вариантов много. Если первое, то я начал бы с примера

    int main(){
      std::vector<char> a = {'B', 'a'};
      std::thread t1(&mySort, &a);
      std::thread t2(&myToLower, &a);
      t1.join();
      t2.join();
    }
    Ответ написан
    Комментировать
  • Как сделать так, чтобы main() возвратила double?

    @Dvvarreyn
    1. Если С++ программка написана более менее разумно, то должно быть возможно превратить её в dll.
    И тогда спокойно возвращать double.

    2. Костыль через арифметику с фиксированной запятой, где точность представления определена априори (или через ключи). И вместо x возвращать static_cast(x*precisionMultiplier).
    Ответ написан