Артем: > extern EthernetClient client;
Это не создание экземпляра класса! Это указание компоновщику, что где-то в другом месте лежит экземпляр класса с этим именем.
Вижу, что табличка не совсем корректна. remove head для vector имеет сложность O(n).
Опять же, есть разница между формальным определением и реализацией. Например, std::deque в плане использования не сильно отличается от std::vector, если пользоваться итераторами или индексами. А вот указателями уже нельзя в deque пользоваться. std::queue вообще реализован в виде фасада над std::deque, поэтому у них все показатели должны быть одинаковы (в пределах свойств интерфейса класса). Но это не к вам претензия, а к составителю таблички.)
В книжках сравнений нет, потому что многое зависит от реализации. Стандарт описывает только интерфейс, а реализовать можно по разному и сложность операций может отличаться. Например Find имеет сложность O(log n) только для отсортированного массива, причём с тем же предикатом, с которым осуществляется поиск.
Егор Марчук: Да, в С надо слово enum перед типом добавлять, чтобы создать переменную.
A, B, C это не переменные, а именованные значения. А variable_1 - переменная, инициализированная значением A. Т.е. вместо абстрактных цифр, можно использовать конкретные имена. Для понятности чтения. В бинарном коде это будут просто целые числа, будто ты написал variable_2 = 1.
Роман Сохарев: В зависимости от применения, разрезать треугольник на три других может не быть нужным. Вместо этого один и тот же треугольник можно внести в две партиции. Опять же, в зависимости от вариантов использования, оверхед от дублирования треугольников может быть гораздо меньше времени дробления треугольников. Сколько-нибудь сложную геометрию в принципе невозможно разрезать пополам, не разрезая(дублируя) треугольников.
Роман Сохарев: Коллизии будут всегда на любой более-менее не квадратной геометрии. С этим приходится жить и это не страшно.
Если есть какие-то особенности в топологии, то можно привязываться к ним, чтобы оптимизировать разбиение. В принципе, плоскости могут даже не быть ортогональными и выровненными по глобальным осям, но это уже сложнее равномерно разбить.
Если нет никаких "особенностей", то можно резать ровно пополам и быть уверенным, что всё делаете правильно.
Николай: Да. Ещё можно построить BSP дерево или "матрицу" для всего уровня, чтобы разграничить все объекты по областям и проверять пересечения не между всеми объектами, а только между теми, которые находятся в одной области.
Подозреваю, что Unity или box2d делают это по умолчанию.
Кстати, даже если по честному считать пересечения полигональных мешей, то сперва лучше проверять пересечение сфер или габаритных контейнеров.
Николай: габаритный контейнер (самый примитивный) выровнен по глобальным осям координат. Благодаря этому принципиально упрощается поиск пересечений. Меш может быть не выровнен по осям и там уже придётся просчитывать пересечения для каждого полигона в меше.
Если хочется прям вообще супер-супер просто и эффективно, то вместо габаритного куба используй габаритную сферу. Там вообще все расчёты сводятся к расстоянию от точки до плоскости. Проще просто некуда.
Михаил: Я писал по адресу, который был в уведомлении. Но меня заблокировали за то, что была ссылка на вторую версию моего же приложения. И мне дали обратно доступ, чтобы я новую версию выложил. Писать им на английском, разумеется.
И я сразу не подумал, у вас приложение это агрегатор новостей? Вроде бы по правилам маркета такие запрещены. И приложения, которые только доступ к сайту обеспечивают, тоже запрещены.
Михаил: Аккаунт сразу не заблокируют. Могут заблокировать приложение, пока не исправите проблему (у меня так было). После исправления приложение разблокировали.
Если по скриншотам будет явно видно, что вы не выдаёте своё приложение за чужое, то не должны заблокировать.
Не подскажите, есть ключик у ffmpeg, чтобы в начале не выводилась информация о самом ffmpeg, а сразу о видео статистика была? Чтобы парсить поменьше.
Запускаю командой "ffmpeg -i video.avi" и сперва выдаётся вот эта лапша, которая вообще не нужна:
Антон Жилин: Я говорю не про MoveAssignable. Например, есть два объекта, ссылающиехся друг на друга по указателям. Их можно сперва разместить в векторе, затем уже связать друг с другом. Но, после этого уже нельзя изменить размер вектора, потому что указатели могут перестать указывать друг на друга.
Xano: move ничем не поможет, если есть ссылки на адреса элементов, например. Если, при изменении размера вектора, невозможно выделить память там же, где она была до этого (типа realloc), то ни emplace, ни move-семантика не поможет. Нетривиальный конструктор копирования как бы намекает, что вектор скорее всего не подойдёт. За исключением случаев, когда копируемый объект может быть разрушен и это не нарушит связи между объектами.
fshp: reserve выделяет память, но не разрешает её использовать, пока не будут добавлены элементы. reserve и resize вообще абсолютно разные проблемы решают. Если вызов конструктора копирования неприемлем, то вектор вообще лучше не использовать, а выбрать list,queue,set.
Антон Жилин: Не reserve, а resize. После reserve нельзя обращаться по индексу, только пушбэками.
Проверки доступа будут, если использовать at, вместо []. Лучше использовать at, чтобы потом меньше страдать.)
Из кодеков, которые есть на конкретной системе. Если есть видео, то пользователь его как-то смотрит, т.е. кодек в системе есть.
ffmpeg можно собрать без кодеков, чтобы использовал установленные в системе, как делают всякие media player'ы?
BaryhaLASH: (занудствующе повторяю) GA ставится за 15 секунд + перезагрузка. Не ленись.) И сразу в защищённом режиме загружайся, чтобы драйвер DirectX поставить.
Это не создание экземпляра класса! Это указание компоновщику, что где-то в другом месте лежит экземпляр класса с этим именем.