toxowa, возможно хранить и массив классов и массив айди или еще что-то более сложное если требуется. Массив классов вариант самый простой и если нет причин усложнять делайте так.
Но если могут быть студенты без групп, или с несколькими группами то возможно стоит хранить всех студентов в отдельном от групп массиве. Учитывайте что в массивах у вас будут ссылки а не копии, если вы явно не сделаете клонирование. Поэтому хранить именно id скорее всего не нужно (тем более это усложняет удаление студентов).
maaGames, Похоже все так. SocketInputStream использует BufferedBidirectionalStreamBuf . Это значит что он может вычитать в свой внутренний буфер больше чем вы ожидаете. Простое решение -- не создавать SocketInputStream для каждого сообщения, а только 1 раз для каждого сокета.
Вероятно придется для каждого poll читать пока sis.rdbuf()->in_avail() не вернет 0. eof https://en.cppreference.com/w/cpp/io/basic_streamb...
maaGames, Вроде не должно пропадать ничего. Да, чтения могут быть блокирующими, если еще не получено все целиком, но в целом ваш подход выглядит рабочим.
maaGames, Если как текст сравнивать, то консольный diff, он же есть как git diff. Есть куча ui утилит meld, p4merge
Именно временные зависимости тоже можно как-то отслеживать, нашлось например: simple-evcorr.github.io
Но выглядит сложно и лучше начать с более простых методов.
Можно использовать NVTX аннотации в коде + https://developer.nvidia.com/nsight-systems и тогда будет таймлайн с событиями как у них на скриншотах. Но это тоже потребует времени на вход.
maaGames, poll говорит вам только о том, что пришли какие-то данные. Это может быть половина или 2.5 сообщения, которые вы ждете. Вы поддерживаете эти ситуации?
Андрей Павлов, Вам действительно настолько нечего делать, кроме как прикапываться к формулировкам в ответах к проходным вопросам полугодовой давности? Ну расскажите мне про то, что python не достаточен для решения прикладных задач. Или что в мире minecraft очень быстро закончится пространство для творчества.
Для собеседования было бы полезно усложнить задачу, сделав массив расширяющимся. Смотрите как это устроено в ArrayList https://habr.com/en/post/128269/
Алина Митрохина, Нет. Как только позиция станет равна 0, вы перестанете ее уменьшать по этому самому условию.
Кстати еще придирка:
Функция push кидает исключение, а pop проглатывает ошибку и возвращает null. Немного не консистентно получается.
Mercury13, В целом вы правы. Но оператор присваивания не обязан делать полную копию всех полей. Если получающийся объект со стороны выглядит эквивалентным, то все ок. Например если объект закешировал результат каких-то вычислений, кеш может быть отброшен. Или тот же std::vector после копирования может иметь меньший capacity, если он был слишком большой. Или copy on write для QString.
Если это не ваш случай, то универсального решения нет. Очень похожая проблема возникает при сериализации. Я видел много разных костылей на макросах и даже внешние кодогенераторы (как делает moc в Qt, например для QProperty). Но жизнь это упрощает далеко не всегда.
HitGirl, Проверьте себя. Нарисуйте тригонометрический круг и поставьте эти точки.
Что-то у вас получается странное. Ответ всегда будет a + 2 *pi * n, по рисунку это будет сразу понятно.
Можно сделать так: ('2' - '0') + ('3' - '0') ==2 + 3 == 5, осталось прибавить '0' чтобы получить код символа.
('2' - '0') + ('3' - '0') + '0' == 2 + 3 + 48 == 53
если сократить получим:
'2' + '3' - '0' == '5'