Задать вопрос
  • Как использовать "гибкость" двумерного массива, перед одномерным?

    @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 комментариев
  • Как поймать в GDB исключение, вызванное из basic_string(const charT*)?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    Нашёл.
    Подключить статический libc++ (-static-libstdc++), тогда всё будет.
    Ответ написан
    Комментировать
  • Как в C# сделать видимым для другой сборки скрытый метод?

    yamaoto
    @yamaoto
    la programmeur
    Как вариант можно попробовать сделать перегруженный публичный метод с директивами
    #if(DEBUG)
    public string GetMyAwesomeString(string anotherOne){
        return _getMyAwesomeString(anotherOne);
    }
    #endif


    соответственно в релизе его уже не будет.
    Ответ написан
    Комментировать
  • Как правильно объеденить редакции Windows?

    @andreyNN
    на собственных сборках и репаках чаще всего разделяют x32 и 64.
    Ответ написан
    Комментировать
  • Как переименовать большое количество файлов по шаблону?

    Может показаться странным, но рекомендую поставить Total Commander. Запустить его, выделить файлы, которые необходимо переименовать, указать правила переименования и нажать Выполнить.
    Либо да, PowerShell в помощь.
    Ответ написан
    2 комментария
  • Кто подскажет нюансы Windows software raid?

    Jump
    @Jump
    Системный администратор со стажем.
    Как мне известно, начиная с Windows 2012, в систему включена функциональность держать полностью программный raid
    Может все таки с 2003, а не с 2012?
    Возможно ли на этот raid установить систему(т.е. создать raid при установке)?
    Если речь именно про RAID, а не про SS, то разумеется можно. Ну и поскольку речь про программный рэйд, реализуемый средствами системы, то он создается после установки, а не при установке.
    Насколько это оправданно?
    Систему есть смысл ставить на RAID только ради бесперебойной работы, т.е на зеркало. Только RAID 1 и только если нужна бесперебойная работа.
    Какие ограничения у программных windows raid?
    Да вроде нет ограничений особо критичных, о которых стоило бы говорить. Только помните что программный RAID с четностью, это приличная нагрузка на процессор.
    Можно ли использовать диски разного объема, добавлять ssd кэш и т.д
    Можно.
    Хочу запилить raid 5 на 3 hdd дисках + добавить к нему 1-2 ssd для ускорения.
    Такое лучше делать не на RAID, а на SS.
    Ответ написан
    1 комментарий
  • Powershell, стоит ли изучать на старте?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    не путайте мягкое с тёплым.
    PoSH - инструмент для решения задач в помощь системному администратору.
    Один из.

    Где-то будет эффективнее решить задачу "мышкой"
    В каких-то случаях проще использовать специально разработанные программные продукты для решения задачи.

    а PoSh - это как некая альтернатива. Можно на него посматривать и проверять
    "а можно ли быстрее и эффективнее решить эту задачу скриптом на PowerShell ?" или
    "А как вот эта задача, которую я накликал мышкой в интерфейсе сервера решилась бы с помощью скриптов(не обязательно PoSh)?"
    А дальше пойдет по накатанной : типовые задачи по автоматизации будут легче решаться(скриптами, если пару раз сделали), нетиповые задачи (при накоплении опыта) будет интереснее делать скриптами и тд и тп.
    B не надо относиться к Powershell как к "о, щас я его изучу и буду всё уметь" - не изучите всё :D
    Ответ написан
    1 комментарий
  • Чем разбирать на составляющие аудиофайлы?

    Rou1997
    @Rou1997
    DirectX.

    и какие существуют сторонние библиотеки для того

    google: c# mp3 editing library
    Ответ написан
    5 комментариев
  • Как установить Windows на GPT диск, без потери данных?

    bossonojka
    @bossonojka
    Чтобы многого достичь, надо от многого отказаться
    Нужно устанавливать систему в режиме UEFI.
    Ответ написан
  • Как использовать одну функцию из библиотеки на Python в C#-коде?

    @Beltoev
    Живу в своё удовольствие
    Чтобы запускать Python скрипты в C# коде, нужно использовать IronPython.
    Статья по теме: metanit.com/sharp/tutorial/9.3.php
    Ответ написан
    1 комментарий
  • Какие API существуют в Visual Studio (C#) для работы с проектом?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Ответ написан
    Комментировать
  • Нужно ли опасаться за данные на пк при обновлении win xp sp2 до sp3?

    SergeySL
    @SergeySL
    Системный администратор
    Ставьте SP3. Очень странно и неправильно, что Вы до сих пор этого не сделали.
    Ответ написан
    Комментировать
  • Можно ли написать в Microsoft Visual Studio 2015 на языке C без C++?

    maaGames
    @maaGames
    Погроммирую программы
    1. Именно расширение *.с должно быть
    2. В настройках проекта можно задать, как компилировать (по умолчанию/C++/C)
    Ответ написан
    Комментировать
  • Как лучше (проще и красивее) реализовать произведение комплексных и действительных чисел?

    Нужно понимать, что не существует операций между комплексными и действительными числами в математике. Действительные числа неявно приводятся к комплексным, и операции уже выполняются над комплексными числами.
    C++ позволяет вам так делать, достаточно определить конструктор с 1 параметром.

    Complex(double _r): Complex(_r, 0){}

    Теперь любые числовые литералы и типы, которые могут быть неявно приведены к double, так же могут быть неявно приведены к Complex. Теперь можно писать следующее:
    Complex(1,2) + 1;

    Остаётся другая проблема. Операторы объявлены как функции-члены, что позволяет их использовать лишь тогда, когда левый операнд - комплексное число. Такое выражение не скомпилируется:
    1 + Complex(1,2)

    Что бы обойти эту проблему, нужно заменить функцию-член на дружественную функцию:

    #include <iostream>
    using namespace std;
    
    class Complex {
    	public:
    		Complex(double _r, double _i): r(_r), i(_i){}
    		Complex(double _r): Complex(_r, 0){}
    		
    		friend Complex operator + (const Complex &left, const Complex &right);
    
    	private:
    		double r,i;
    };
    
    Complex operator + (const Complex &left, const Complex &right) { //Friend function
    	return Complex(left.r + right.r, left.i + right.i);
    }
    
    int main() {
    	Complex a = 4;
    	Complex b(1,2);
    	int c = 5;
    	a+b;       // OK
    	3+b;       // OK
    	a+123.0f;  // OK
    	c+a;       // OK
    	return 0;
    }
    Ответ написан
    5 комментариев
  • Как добавить web проект в VS?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    добавляются только файлы корневого каталога

    Не совсем понял, о чем речь. Возможно, в Visual Studio 2015, если делать вставку из проводника, файлы могут не включаться в решение, будут добавлены только каталоги. Их придется включать вручную. Для этого нужно включить показ всех файлов:

    89d8e00e769e41808eab50484b01860e.png
    И затем выбрать недостающие файлы и папки и включить их в проект через контекстное меню:

    110986bb5b81446e980dce674c107b4f.png

    В Visual Studio для PHP я использую PHP Tools for VS.

    С TypeScript в рамках Visual Studio проект PHP дружить так и не захотел.

    Самое простое решение - сделать отдельный проект для TypeScript (в рамках одного решения).

    В bundleconfig.json (BundlerMinifier) можно прописать вывод собранных файлов в любую папку, в том числе в папку с проектом PHP.

    Вот тут можно посмотреть пример, как это может быть.

    460884d980314ab4902ecdd101ad5888.png
    Структура решения:
    /Решение
    -- FrontEndScripts - проект TypeScript
    -- SmallServerAdmin - проект PHP, в который, помимо прочего, собираться клиентский код

    bundleconfig.json
    [
      {
        "includeInProject": false,
        // вывод js делаем в проект SmallServerAdmin
        "outputFileName": "../SmallServerAdmin/Content/compiled.js",
        "inputFiles": [
          // файлы, которые должны входить итоговую в сборку
          "libs/jquery-1.11.2.js",
          "libs/jquery-ui.min.js",
          "libs/jquery.json.min.js",
          "libs/jquery.caret.min.js"
          // ...
        ]
      }
    ]


    TypeScript компилируется в JavaScript в тоже место, где находятся файлы TypeScript. Каждый файл прописывается в bundleconfig.json. Затем все это собирается в итоговый файл /SmallServerAdmin/Content/compiled.js.

    Плохое, но простое решение.

    Еще можно попробовать в настройках проекта TypeScript (Проект -> Свойства проекта) указать параметры сборки и папку вывода (путь может быть относительным).

    ae17a55c4ba748fb9eb97d8974479ee9.png
    Если оставаться в рамках одного проекта, то можно попробовать сделать файл конфигурации TypeScript в корне проекта: tsconfig.json. Возможно он будет использован, но в проектах отличных от TypeScript я этого не проверял и не могу точно сказать, как это будет работать.

    {
      "compilerOptions": {
        "outDir": "./куда делать вывод компилированных файлов",
        "sourceMap": false,
        "noImplicitAny": true,
        "module": "CommonJS",
        "target": "es5"
      },
      "files": [
        // файлы проекта
        "./init.ts"
      ]
    }


    С WebPack можно сделать больше, но это будет существенно сложнее. Пример решения (TypeScript + PHP) можно тут посмотреть.

    Для WebPack потребуется:

    • Node.js
    • Webpack Task Runner
    • NPM Scripts Task Runner

    Управление сборкой TypeScript можно оставить студии, это проще всего. А все остальное прописывается в webpack.config.js. Но все может быть очень сложно, на получение оптимальной конфигурации можно угрохать пару десятков часов :-)
    Ответ написан
    2 комментария
  • Как правильно снять значение нагрузки CPU с удаленного сервера windows или linux?

    Zabbix, nagios - системы для централизованного сбора статистики с хостов, как Win, *nix и прочего оборудования, поддерживающего SNMP.

    Если стандартного набора скриптов этих систем будет недостаточно, они могут выполнять и вот такие скрипты как найденный вами, возвращая результат серверу мониторинга, где вы централизованно сможете смотреть сатистику по всем своим системам.
    Ответ написан
    2 комментария
  • Как установить v140 build tools для visstudio 2013?

    maaGames
    @maaGames
    Погроммирую программы
    Ставить 2015 студию. Благо, это бесплатно.
    Ответ написан
    Комментировать
  • Инструменты для генерации сетевого трафика для windows?

    JohnnyGat
    @JohnnyGat
    Стараюсь писать код, понятный человеку.
    Ostinato

    Support for the most common standard protocols
    • Ethernet/802.3/LLC SNAP
    • VLAN (with QinQ)
    • ARP, IPv4, IPv6, IP-in-IP a.k.a IP Tunnelling (6over4, 4over6, 4over4, 6over6)
    • TCP, UDP, ICMPv4, ICMPv6, IGMP, MLD
    • Any text based protocol (HTTP, SIP, RTSP, NNTP etc.)
    • More protocols in the works …
    Ответ написан
    Комментировать
  • Как работать с командной строкой? отправлять команды? получать сообщения?

    @Teermit
    Через _popen так нельзя, насколько я знаю
    Под POSIX решением было бы использовать pipe() и fork(), но под Windows это, скорее всего, не будет работать
    Если вывод команд не важен, можно использовать system("..."), но это не всегда будет работать
    Более правильный вариант: запускать CMD через WinAPI посредством CreateProcess, пример есть тут: https://msdn.microsoft.com/ru-ru/library/windows/d...
    P.S. C++, вероятно, далеко не самое лучшее решение для этой задачи
    Ответ написан
    Комментировать