Задать вопрос
  • Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Никак не пойму что за ошибка, и что она хочет от меня.

    Ошибка -- обращение к памяти, к которой нельзя обращаться, первая ссылка по запросу sigsegv в гугле.
    Хочет она от тебя чтобы ты веделил память для colonies[i].aparts перед тем как к ним обращаться.
    Ответ написан
    Комментировать
  • Есть ли хоть какое-то преимущество использования функтора перед обычной функцией в данном случае?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    У функтора перед функцией есть только одно преимущество - это наличие состояния функтора, которое может меняться между обращениями к его функциональному оператору и влиять на его поведение. Функтор настраивается эксклюзивно, функция - по понятным причинам - только глобально.
    У функции перед функтором тоже есть преимущество - это адрес функции, по которому сразу можно начать ее исполнение. У функтора всегда будет два адреса - адрес метода функционального оператора и адрес самого функтора.

    Исходя именно из этих преимуществ и следует выбирать между функтором и функцией.
    Скажем, если бы нужно было nums вписать в CSV таблицу в виде матрицы, то проще использовать функтор. Создать его, настроить поток вывода, символ-разделитель столбцов, количество выводов до перехода на следующую строку и передать в std::for_each.
    Если такая настройка поведения не требуется, от функтора лучше отказаться в пользу функции во всех случаях.

    Функтор используется в реализации идиомы делегата и коллбека. Делегаты позволяют универсальным образом хранить самые разные точки исполнения кода и безопасно проводить по ним исполнение.
    Если использование делегатов оправдано необходимостью, в делегаты оборачивают даже указатели на функцию, чтобы сохранить единообразие подхода к управлению исполнением.
    Ответ написан
    Комментировать
  • Как узнать размер массива, который был передан в шаблонную функцию?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Если коротко, правила автоматического вывода шаблонных аргументов предусматривают вывод полного типа для переданного аргумента при инстанцировании шаблона функции.

    Что это означает на практике? В языке есть термин массива статического размера. Частным примером такого массива является строковой литерал. Конкретно у строкового литерала из простых символов тип будет таким: const char[N], где N - это размер памяти под строковой лиерал, в байтах.

    Таким образом, если сделать такое объявление шаблона
    template< typename TValue >
    void Foo( TValue& value ); // (1)

    то при инстанцировании как Foo( "Hello" ); аргумент TValue определится как const char[6].
    И мы довольно легко можем воспользоваться этим механизмом. Нужно только дать пояснение, как и во что стоит выводить шаблонные аргументы.

    Шаблон можно записать вот так:
    template< typename TValue, size_t LENGTH >
    void Foo( TValue (&value)[ LENGTH ] ); // (2)

    В этом случае при инстанцировании как Foo( "Hello" );, аргумент TValue будет выведен как const char, а нетиповой аргумент LENGTH будет выведен в значение 6.
    Собственно, все. Размер переданного массива получен.

    Такой шаблон считается более специализированным по отношению к определению выше. Поэтому при наличии обоих шаблонов, инстанцирование для прочих типов будет выбирать первый шаблон, а инстанцирование для массивов статического размера будет проваливаться во второй, как в более специализированный.

    В чем суть модификаторов в параметрах шаблона

    Если первый шаблон объявить как
    template< typename TValue >
    void Foo( TValue value );

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

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

    Параметр такой "другой" функции лучше всего определить универсальной ссылкой и использовать идеальную передачу. Тогда все будет работать правильно.
    Ответ написан
    2 комментария
  • Как массово переименовать файлы по порядку?

    wisgest
    @wisgest
    Не ИТ-специалист
    Переименование файлов в текущем каталоге будет выглядеть так:
    setlocal enableextensions enabledelayedexpansion
    set /a "num = 0"
    for %%I in (*.jpg) do (
    	set /a "num += 1"
    	ren "%%~I" !num!.ren_jpg
    )
    ren *.ren_jpg *.jpg
    endlocal
    Ответ написан
  • В каком направление двигаться начинающему системному администратору?

    @ewgenc
    А что вы хотите? Можно сети изучать дальше, Linux администрирование, DevOps, базы данных, виртуализацию и т.п. За вас никто не решит.
    Ответ написан
    1 комментарий
  • В каком направление двигаться начинающему системному администратору?

    @TheBigBear
    СтарОдмины мы
    Для начала определитесь - стагнация или потеря интереса к профессии
    Даже в рамках одной конторы можно интересно и с пользой для дела получать знания
    Вот навскидку:
    Поиграйтесь с VLAN, разделение сети на сегменты, поднятием MESH
    Поставьте и настройте Zabbix, натравите на мониторинг сети
    Подберите на свой вкус программу инвентаризации и учета (например, GLPI)
    Найдите удалённую подработку
    Самое главное - это чтобы было интересно
    Ответ написан
    Комментировать
  • В каком направление двигаться начинающему системному администратору?

    Viji
    @Viji
    DevOps Engineer
    В конце концов можно заняться сертифицированием, получите CISCO CCNA или Microsoft сертификаты, автоматизируйте ваши типичные задачи с помощью PowerShel - заодно его выучите, поставьте на один комп Линукс.. дополните его аутентификацией в AD, поизучайте сам Линукс.

    У вас есть свободное время и пространство для развития - кайфуйте с этого!
    Ответ написан
    Комментировать
  • Как поменять код, чтобы при заполнении двумерного массива распознавалась переменная int и не запрашивало указатель?

    by_kapt0xa
    @by_kapt0xa
    Учу кресты катаюсь на велике
    #include <random>
    #include <iostream>
    using namespace std;
    
    void zxc(int* arr, const int row, const int col)
    {
    
    	srand(time(NULL));
    	for (int f = 0; f < row; f++)
    	{
    		for (int j = 0; j < col; j++)
    			arr[f* col + j] = rand() % 10;
    	}
    
    }
    
    void qwe(int* arr, const int row, const int col)
    {
    
    	for (int i = 0; i < col; i++) {
    		for (int f = 0; f < row; f++)
    			cout << arr[f * col + i] << "\t";
    		cout << endl;
    	}
    }
    
    //qwe и zxc это самые удачные названия для функции, из названия сразу ясно что эти функции делают.
    
    int main()
    {
    	const int row = 5;
    	const int col = 7;
    	int arr[row * col];
    	zxc(arr, row, col);
    	qwe(arr, row, col);
    }

    программисты C++ таким не занимаются, это больше похоже на C.
    вот как выглядит нормальный код на C++:
    #include <random>
    #include <iostream>
    #include <vector>
    using namespace std;
    
    void zxc(vector<vector<int>>& arr, const int row, const int col)
    {
    	srand(time(NULL));
    	arr.resize(row);
    	for (auto& line : arr)
    	{
    		line.resize(col);
    		for (auto& x: line)
    		{
    			x = rand() % 10;
    		}
    	}
    
    }
    
    void qwe(const vector<vector<int>>& arr, const int row, const int col)
    {
    	for (const auto& line : arr)
    	{
    		for (const auto& x : line)
    		{
    			cout << x << "\t";
    		}
    		cout << endl;
    	}
    }
    
    int main()
    {
    	const int row = 5;
    	const int col = 7;
    	vector<vector<int>> arr;
    	zxc(arr, row, col);
    	qwe(arr, row, col);
    }

    простые массивы имеют массу неприятностей, связанных с НЕгибкостью кода. если вы пишете на плюсах, познакомьтесь с векторами.
    !!!!!!!!!извиняюсь, предыдущая версия была с ошибками, я отредачил
    Ответ написан
    1 комментарий
  • Почему при использовании переменной в методе, выдает ошибку Linker Tools Error LNK2001?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему при использовании переменной в методе, выдает ошибку
    class Test
    {
      static std::string question;


    Потому что статическое поле класса нужно определить, его упоминание в определении класса -- это не определение. Определить его можно например так в .cpp вне всех функций:
    std::string Test::question;
    Ответ написан
    Комментировать
  • Какая максимальная скорость LAN портов у роутера при одновременном подключении к ним устройств?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    Если все порты на одном свитч-чипе, то у него обычно пропускная способность = скорость порта * кол-во портов * 2. И между двумя любыми портами будет гигабит.
    Если свитч-чипы разные (как у 10 портовых микротиков), то нужно смотреть по схеме какая линия между ними.
    WAN - отдельная история, там большую задержку и соответственно ограничение скорости вносят программые алгоритмы маршрутизации и фильтрации, но обычно с выключенной маршрутизацией скорость LAN-WAN приближается к максимальной скорости порта.
    Ответ написан
    Комментировать
  • Какая максимальная скорость LAN портов у роутера при одновременном подключении к ним устройств?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Какая будет скорость на каждом порту при одновременном тесте скорости на каждом устройстве?

    Типичное "у меня в подполе происходит стук".

    Да фиг знает... смотря как именно тестировать.

    Если перевести роутер в режим моста, поотключать все внутренние обработки трафика в нём, и тестировать парно WAN <-> LAN1 и LAN2 <-> LAN3, то скорее всего все 4 тестера покажут скорость, близкую к гигабиту. Если тестировать (LAN1, LAN2, LAN3) <-> WAN, опять же всё отключив, то на WAN-порте тестер покажет что-то порядка гигабита, а тестеры на LAN-портах втрое меньше (причём что а) поровну б) стабильно - не гарантировано). Если каждый тестер будет гонять трафик на все остальные три тестера/порта - то в среднем будет по 300 мбит на парный линк и порядка гигабит суммарно на узел.

    А если роутер оставить именно в режиме роутера, то очень трудно предсказать, что получится, насколько производительна программная обработка трафика. И эта производительность критично зависит от задействованных в роутере программных сервисов...
    Ответ написан
    Комментировать
  • Тип с точностью до 4 знаков C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Есть. Называется int. Вам надо хранить количество десятитысячных в числе. Иными словами, вы вместо x храните в int x*10000. При выводе делите на 10000 (и установите выводить 4 знака).

    Такие числа можно просто складывать и вычитать. При умножении надо будет результат поделить нацело на 10000 (или округлить к ближайшему, делящемуся на 10000 и потом отбросить 4 нуля). При делении - наоборот. Надо сначала домножить числитель на 10000, а потом поделить нацело на знаменатель (возможно стоит подумать об округлении к ближайшему целому).

    Upd: И вообще, раз уж разговор о C++, то можно реализовать свой класс. Там можно даже отдельно хранить целую часть и 4 знака после запятой. Если вам встроенной точности int/int64_t не хватает. Все математические операции можно переопределить и работать, как со встроенным типом. Вообще, по-умному, это называется fixed point numbers.
    Ответ написан
    Комментировать
  • Как решить проблему в коде не запускается код, основные операции над бинарным деревом?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это не бинарное дерево. Ерунда какая-то. Обычно когда объявляют такое дерево -то считают что это
    бинарное дерево поиска. И в нем должны быть функции для расстановки узлов относительно значения Data.

    Здесь что? Непонятно. Рандомным образом раскидали? Зачем?
    Ответ написан
    Комментировать
  • Сколько ядер процессора хватит для программирования?

    Для учёбы точно хватит
    Ответ написан
    Комментировать
  • Что делать с кросс-компиляцией на gcc?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    apt-get install gcc-aarch64-linux-gnu

    после этой команды команда dpkg -L gcc-aarch64-linux-gnu покажет тебе содержимое пакета, откуда ты узнаешь, что имя компилятора -- aarch64-linux-gnu-gcc
    Ответ написан
    1 комментарий
  • -x^2 - положительно или отрицательно?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если в степень возводится значение с минусом, то в математике принято писать его в скобках (-x)2.
    Ответ написан
    1 комментарий
  • Приделывать Git на сайт это хорошо?

    git - это система контроля версий.
    Это не "локальное хранилище" и не нечто, что можно "приделать" сбоку.

    Предположу, что под словом "приделать" вы имеете в виду использование git для доставки обновлений на продуктивный сервер.
    Моё мнение - так делать не стоит.
    Серверу совершенно не нужно хранить у себя всю историю версий.

    А вот локально да - лучше вести разработку в git.
    Ещё по хорошему следует хранить копию репозитория на каком-нибудь ещё сервере, например в собственном экземпляре gitlab и синхронизировать её с локальной при помощи git pull/push.

    Ну и помни, что не надо все файлы в git запихивать. В git должны храниться только исходные файлы. Всякие картинки - в git-lfs.
    Пароли - в каком-то другом хранилище.
    Артефакты, которые создаёт компилятор или препроцессор - в .gitignore
    Ответ написан
    1 комментарий
  • С чем связяна эта ошибка (SFML)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Скачал библиотеку, подключил ее в параметрах проекта

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

    @12rbah
    return 0;
        menu_for(v);
    Казалось бы, что могло бы пойти не так, попробуйте поменять местами return и menu_for
    Ответ написан
    Комментировать
  • Как посмотреть нагруженность сети интернет?

    @Drno
    Диспетчер зада > производительность > сеть(ethernet)
    Ответ написан
    Комментировать