Задать вопрос
  • Как воспринимает переменные С++?

    Как разные. Регистр символов учитывается.
    Ответ написан
    1 комментарий
  • Kак определить тип переменой в swift?

    @AntonGorb
    iOS Developer (Cherkassy)
    func setCookies() -> HTTPCookie? {
            let cookieProperties: [HTTPCookiePropertyKey : Any] = [HTTPCookiePropertyKey.name:   "PerfectCookie",
                                                                   HTTPCookiePropertyKey.value:  "Perfect is awesome",
                                                                   HTTPCookiePropertyKey.domain: "localhost",
                                                                   HTTPCookiePropertyKey.secure:  false]
            return  HTTPCookie(properties: cookieProperties)
        }
    Ответ написан
    Комментировать
  • Существуют ли правила подключения include-файлов в С++?

    15432
    @15432
    Системный программист ^_^
    Я в проектах делаю так:
    • в шапке .h файла #pragma once
    • в .h файле только описание класса - члены, методы, иногда структуры
    • инклюдим в .h другие .h только если этого требует описание класса
    • всё остальное необходимое для реализации инклюдим в .cpp
    Ответ написан
    3 комментария
  • Почему это моветон?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Алексей: Евгений Шатунов:
    Люди умеющие гуглить, но не понимающие, о чём речь, дают ответы! Каждый день на тостере!
    Они могут нагуглить статью, в которой говорится примерно о том же, о чём задан вопрос, но, увы, не вполне.
    И ни в статье, ни в ответах так и не появляется правильного ответа.
    А правильный ответ -- во второй, неочевидной части пункта стандарта, описывающего выражения (C89: 3.3:2, C99: 6.5:2):

    Between the previous and next sequence point an object shall have its stored value
    modified at most once by the evaluation of an expression. Furthermore, the prior value
    shall be read only to determine the value to be stored.


    Т.е. если объект модифицируется, то читать его можно с единственной целью -- для вычисления значения, которое будет в него записано. Код a[i] = i++; читает значение изменяемой переменной i с другой целью: доступ к элементу массива по индексу, результат которого не влияет на конечное значение i -- и этого достаточно, чтобы такой код попадал в категорию UB.
    Ответ написан
    7 комментариев
  • Сменить кодировку текста pdf

    PoCTo
    @PoCTo Автор вопроса
    Нашёл решение для моих случаев:
    gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER  -sOutputFile=output.pdf input.pdf

    После этого у output.pdf невероятным образом появляется верная кодировка.
    В Windows исполняемый файл должен называться gsw32c, gswin32c, или тоже gs.
    Ответ написан
    9 комментариев
  • Как вставить значение строки как аргумент функции?

    @Mercury13
    Программист на «си с крестами» и не только
    1. В строковой переменной или строковом буфере собрать тело команды, экранируя параметры, если это нужно.
    2. Если это обёрнутый string, преобразовать в const char* — и пошёл.
    std::string command;
    char data1 = 'F';
    char data2 = 'C';
    command = std::string("color ") + data1 + data2;
    system(command.c_str());
    Ответ написан
    1 комментарий
  • Особености функций malloc/calloc/new?

    @res2001
    Developer, ex-admin
    А вы документации не доверяете что ли?
    Забивает память нулями только calloc, о чем в доке написано.
    Проверено неоднократно.
    Чтоб проверить выделите массив intов, например побольше - несколько мегабайт, и ищите в нем не нулевые значения. Уверен, долго искать не придется.
    Ответ написан
    Комментировать
  • Где найти интересные задачи для изучения C++?

    longclaps
    @longclaps
    Q:
    Учусь читать по букварю. Практические упражнения там есть, но маловато. Хочется после каждой новой буквы ("о", "п", "р") прочесть 2-3 книги для закрепления материала, и не тривиальных, вроде "мама мыла раму", а что-то интересное, типа трёх мушкетёров. Есть ли такой ресурс?
    A:
    Нет.
    Ответ написан
    1 комментарий
  • Как UTF-8 помещается в char?

    TrueBers
    @TrueBers
    Гуглю за еду
    А никак не помещается.
    Потому что Си не поддерживает обработку строк в UTF-8. Для этого нужны сторонние библиотеки, которые умеют делать нормализацию, считать длину строки в абстрактных символах, а не кодпоинтах, и т. д. Поддержки этого всего у Си и C++ из коробки нет.
    Ну, вы можете, конечно, запихнуть UTF-8 поток в массив char'ов, но ни одна нативная функция для работы со строками не будет с ним работать правильно. Даже длину строки никогда не сможет посчитать.

    Поэтому, ответ прост: в C/C++ для работы с UTF8 используйте стороннюю библиотеку.
    И да, никогда не используйте wchar_t нигде, где не можете этого избежать, например, в апи сторонних библиотек. wchar_t это тупо костыль в дизайне языка, который признали даже создатели этих языков.
    Ответ написан
  • Работа с ДИНАМИЧЕСКИМ массивом структур,как?

    GavriKos
    @GavriKos
    Раз с++ в тегах - используйте std::vector.
    Ответ написан
    Комментировать
  • Есть ли разница между char* и char[число] при передаче аргументов функции?

    @alex-t
    Прогр. в команде rco.ru
    Проблема в том, что именно компилятор НЕ будет ругаться...
    Передавая (точно так же) массив ( process_array(array);) можно либо явно контролировать длину массива
    void process_array4 (char (&array)[4]) {
      for (int i = 0; i < 4; i++)
        array[i]++;
    }

    Либо написать функцию, которая скомпилируется с нужной длиной
    template <size_t N>
    void process_arrayN (char (&array)[N]) {
      for (int i = 0; i < N; i++)
        array[i]++;
    }
    Ответ написан
    Комментировать
  • Массив uint8_t [8] на переменную uint64_t?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    union {
      uint8_t  u8[8];
      uint64_t u64;
    } var;

    Или
    uint8_t var[8];
    *((uint64_t *)var);

    Или
    uint64_t var;
    ((uint_8 *)&var)[0];
    ((uint_8 *)&var)[7];
    Ответ написан
    5 комментариев
  • Как организовать работу с данными склада?

    MetaAbstract
    @MetaAbstract
    Архитектор информационных систем и баз данных. Ful
    1. составить бизнес-требования к системе
    2. написать ТЗ
    3. заказать проект системы

    А в целом возьмите 1С и не изобретайте велосипеды.
    Ответ написан
    2 комментария
  • Как на C++ узнать количество передаваемых аргументов?

    MrNexeon
    @MrNexeon
    Быстро и легко. Считаем с помощью вариативных шаблонов и оператора sizeof

    template <typename ... Args> int ArgsCount(Args ... args) {
        return sizeof...(args);
    }
    
    std::cout << ArgsCount(1, "hello", 2.f); // Вывод: 3
    Ответ написан
    Комментировать
  • Поиск одинаковых значений в 12 массивах. Как это сделать?

    maaGames
    @maaGames
    Погроммирую программы
    Если массивы можно модифицировать, то их следует отсортировать. После этого поиск становится тривиальным.
    Если отсортировать нельзя, то поиск тоже тривиален, но более долгий (для каждого значения в массиве придётся проверять все элементы всех остальных массивом).
    Ответ написан
    Комментировать
  • Пишут ли на Swift приложения, без использования Objective-C?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Сам я не разрабатываю ни для мака, ни на свифте, но вот тут пишут, что это вполне возможно, и делятся ссылками на туториалы.
    Ответ написан
    Комментировать
  • Как пропустить весь поток для того, чтобы можно было воспользоваться getchar()?

    @abcd0x00
    Запомни одно
    fflush(stdin);
    это полное фуфло от незнающих. В стандарте оно не определено, поэтому на разных компиляторах оно будет по-разному себя вести в итоге. В лучшем случае оно ничего не будет делать, в худшем - выдаст какой-нибудь мусор.

    Твоя проблема в том, что после ввода числа там сохраняется перевод строки (нажатый Enter) и вот его-то и надо прочитать.

    scanf("%d%*c", &a);

    А вообще, не надо использовать scanf() таким образом. Вместо этого надо сделать getline() на базе fgets() + sscanf() - и тогда всё будет работать точно.
    Ответ написан
    Комментировать
  • Как правильно очистить память при работе со стеком (ADT)?

    @Ariox41
    Рекомендую почитать про std::unique_ptr
    Вот вариант на c++11
    #include <memory>
    
    template<typename T>
    class Stack{
    public:
      Stack(std::size_t maxSize_): maxSize(maxSize_){}
    
      // Что происходит, когда стек пуст? Можно бросить исключение, или сделать как в std
      T pop(){
        // if (!tmp) throw ...
        auto tmp = std::move(head);
        // Обратите внимание, теперь head пуст
        head = std::move(tmp->next);
        // Теперь tmp->next пуст
        --size;
        return tmp->value;
      }
    
      bool push(T value){
        if (size+1 > maxSize)
          return false;
    
        // здесь может быть брошено исключение из-за нехватки памяти
        std::unique_ptr<Node> tmp(new Node(value));
    
        tmp->next = std::move(head);
        head = std::move(tmp);
        ++size;
        return true;
      }
    
    private:
      struct Node{
        T value;
        std::unique_ptr<Node> next = nullptr;
        Node(T value_) noexcept
          : value(value_)
        { }
      };
    
      std::unique_ptr<Node> head = nullptr;
      std::size_t maxSize;
      std::size_t size = 0;
    };
    Ответ написан
    Комментировать
  • Как использовать "гибкость" двумерного массива, перед одномерным?

    @Mercury13
    Программист на «си с крестами» и не только
    Итак, перед нами задача: сделать динамический массив «умных указателей единоличного владения». Умный указатель единоличного владения (std::unique_ptr из C++11) — это указатель, который самолично владеет выделенной памятью; при исчезновении указателя исчезает и память.

    Раз мы только учимся, мы не будем влезать в самописные шаблоны C++, готовые шаблоны STL (кроме algorithm и string) и новый, но уже реализованный во всех компиляторах стандарт C++11. Это довольно серьёзное ограничение; если его снять, можно серьёзно упростить себе жизнь. А для этого мы отделим структуру данных от жизненных объектов и реализуем объект StudentList. Пишу с листа, возможны ошибки.

    Да, и без C++11 умный указатель единоличного владения реализовать довольно тяжело — поэтому структуру данных будем делать «монолитно», без разделения на умный указатель и динамический массив.

    #include <algorithm>
    
    class StudentList
    {
    public:
      StudentList();
      ~StudentList();
      Student& add();   // добавить пустого студента и выдать ссылку на новенького
      size_t size() const { return fSize; }
      Student& operator[](size_t i) { return *fData[i]; }   // можно также наладить проверку диапазона — сделай это сам…
      const Student& operator[](size_t i) const { return *fData[i]; }
      void clear();
    private:
      typedef Student* PStudent;
      PStudent* fData;
      size_t fSize, fCapacity;   // реальное кол-во студентов и на сколько студентов у нас заведено памяти.
                            // Указатели [fSize..fCapacity) резервные, их значение не определено и высвобождать
                            // их не надо.
      enum { BLOCK_SIZE = 16; };
      StudentList(const StudentList&) {}   // копирование запрещаем, хочешь — реализуй сам и вынеси в public
      StudentList& operator=(const StudentList&) { return *this; }  // аналогично
    };
    
    StudentList::StudentList(); : fData(NULL), fSize(0), fCapacity(0) {}
    
    Student& StudentList::add()
    {
      // Убедиться, что массива хватает; если нет — расширить
      if (fSize >= fCapacity) {
        size_t newCapacity = fCapacity + BLOCK_SIZE;
        PStudent* newData = new PStudent[newCapacity];
        std::copy(fData, fData + fSize, newData);
        delete[] fData;
        fData = newData;
        fCapacity = newCapacity;
      }
      // Завести нового студента
      Student* r = new Student;
      fData[fSize++] = r;
      return *r;
    }
    
    void StudentList::clear()
    {
       for (size_t i = 0; i < fSize; ++i)
         delete fData[i];
       delete[] fData;
       fData = NULL;
       fSize = 0;
       fCapacity = 0;
    }
    
    StudentList::~StudentList()
    {
       clear();
    }


    Удаление и прочее сам наладишь?

    А группа будет пользоваться нашим списком.

    #include <string>
    
    class AcademyGroup
    {
    public:
       std::string name;
       StudentList students;  // при желании можно заинкапсулировать и его.
    };


    Это перед нами, правда, не двухмерный массив, как я уже сказал. Массив, хоть и Student**, но одномерный; каждый элемент массива — умный указатель единоличного владения. Если бы мы писали на STL C++11, это был бы std::vector<std::unique_ptr<Student>>.

    Кроме УУЕВ, существует также умный указатель совместного владения std::shared_ptr.

    Можно сделать второй вариант — массив из одномерных массивов. Если он заполнился — заводим ещё один массивчик. Пишется немного сложнее, особенно если не пользоваться STL. На STL — std::deque<Student>.
    Ответ написан
    6 комментариев