Вместо шапки - https://github.com/sosachbot/cppthreadhat/wikiОтветы на все вопросы - http://en.cppreference.com/w/ http://www.cplusplus.com/reference/
Принес вам пасту из соседнего тредаСообщество rust, где полторы интерпрайз-калеки, сделали в разы больше, чем орава долбоебов, которая боготворит швятой сипляспляс и в 2019 не смогли даже отказаться от хедеров или запилить нормальную систему сборки. один гугл хоть как-то скрашивает это болото шлангом и базелом6 месяцев назад я поднял вопрос внедрения bazel в большом двадцатилетнем проекте на плюсах, над которым работает 120 человек. Полная пересборка проекта длится 110 минут в одной кофигурации, пересборка после мержа с апстримом - минут 30.Провел презентацию, сделал тестовый проект с бенчмарками, где dramatically ускорялась компиляция. В общем, показал с пруфами, что BAZEL - КРУТО. Что вы думаете? Менеджер сказал - нахуй надо, нам и так норм. Орава сеньеров-помидоров-титулованных-плюсовиков сказала "нуууу это. Круто, конечно, но наш проект НЕРЕАЛНА портировать, столько кода же. 20 лет пилим бля!".Ну ок, похуй, пляшем. Два месяца в личное время портировал проект и 100500 библиотек на bazel + еще под clang скомпилил.Полная сборка сократилась со 110 минут до 5 минут. Типичная сборка после обновления до апстрима сократилась с 30 минут до 2 минут. Поцики на линуксе заценили, теперь живут и радуются. На винде дебики только сказали "хм, ну интересно, наверное. А как на винде сделоть?". Я их отослал в документацию, так эти ебланы до сих пор не сделали. На винде сидит 2/3 всех разработчиков
Похожая история с memory sanitizer'ами. Показал этим деградантам, рассказал что и к чему. Первая реакция - ЭТО НЕВОЗМОЖНО, ВРЕТИ!!11 (sic!). Пиздец, приехали. За ручку повел на гитхаб, показал доку. Ну ок, вроде поверили. Запустили продукт с санитайзерами - больше 10к ошибок. Теперь фиксят понемногу. Про швятую студию - тоже охуительные истории. В 2k19 студия работает в 32bit бинаре. Лолчто блядь. Глючит ровно так же, как и vs2010, чтобы ни говорили фанбои. Я лично проверял. Средства рефакторинга? Ну есть вроде, но не работают нормально. Каждый первый плюсовик ставит помидорку или решарпер на студию, позорище блядь. Когда говоришь про CLion - сразу "ну мне и так норм, лень менять". Потом сидишь рядом с этим "и так норм", дебажишь в паре очередной рандом в многопотоке с никакой навигацией по коду и радуешься тому, как все свистит, пердит и виснет.
Зато каждый первый хуевертит побитовое сравнение структур вместо нормального компаратора, делает макросы на каждый чих и обмазывается рекурсивными шаблонами для кодогенерации. Синьоры-плюсовики, хуле. Макросы макросов с пятиуровневыми шаблонами внутри - это про них. Еще почему-то любят писать свои собственные библиотеки на каждый чих. Даже если на гитхабе уже есть. Не все так делают, но это довольно характерно для плюсовиков.В типичном проекте на плюсах вероятность 90%, что ты встретишь 4-5 разных классов для строк, свою либу сериализации, rpc, кодогенерацию, in-memory fs и набор хитровыебанных примитивов синхронизации на пару с пулами потоков. А еще будут свои итераторы и стримы данных, потому что std::*stream - это ебанное убожество. Кроме этого будет кастомный пердолинг вокруг системы сборки и невоспроизводимые билды.Трустори. Все это встречал на трех конторах в трех разных больших продуктах. И везде был один типикал C++-контингент. Дважды даже встречал самописный map-reduce на итераторах (аналог java streams), лол.
В общем, большенство плюсовиков - я это такие пидорахи в мире программистов. Любят скрепы и защищают недостатки родины, люто неприемлят любое новое, другие языки и технологии.Так что, анон, брось дрочить на плюсы, переходи на что-нибудь статически-строго-типизированное и функциональное, с нормальным тулингом и сообществом.ДИСКАСС
>>1365149>переходи на что-нибудь статически-строго-типизированное и функциональное, с нормальным тулингом и сообществом.Борщехлеб маскировался под программиста, но под конец не выдержал.
>>1365149>переходи на что-нибудь >но не скажу на что>ведь знаю, меня обоссут и обосрут лишь за упоминание этого лютого говнища>и главное, я сам это прекрасно понимаю, но всё равно убежденный говноед, но скрываюсь, чтобы другие этого мне в лицо не сказали
>>1365230>Rust>СкриптомакакаПостроить из себя большого профессионала у тебя не получилось. >>1365244Да, я в курсе. Не хотелось создавать новую категорию или относить язык к категории раста
Поясните, как обойти дерево итеративно? В данный момент я сначала загружаю его в массив, а потом читаю массив, но мне кажется он тут лишний. Или мб можно что-то типа пайпа реализовать, чтобы функция рекурсивно выплевывала значения?
>>1365336Тебе в любом случае нужен будет стек в каком-то виде. Если с массивом все ок выглядит то лучше так и оставить. Алсо, не совсем ясно что ты подразумеваешь под "загружаю его в массив". Чтобы загрузить дерево в массив его нужно обойти.
>>1365376Бля, не хочетс реализовать стек, ну да ладно. Массив создавал рекурсивно, лол.>>1365408Как ты будешь обходить деерево через for?
>>1365426Ты лабу по алгосам что ли делаешь? Дерево (как и любой граф) можно обойти итеративно поиском в ширину или глубину. Если не лень, можешь обратить внимание на Boost Graph Library, не придется писать свой велик.
>>1365149Плюсоебство - это как православие. Когда протестантизм завещает работать над собой и создавать блага, славя величие Господа, православие требует от последователя искупления греха, посредством непрерывного страдания, как страдал Иисус неся свой крест. Стрелять себе в ногу и нажираясь потом водкой, позерски ноя о тяжестях нищебродской жизни -- что может быть лучше для православного плюсоеба?
>>1365431Рассмешил нахуй. Было на premake. Фишка bazel в том, что он умеет кешировать результаты сборки. Можно организовать кеш на локальной тачке и тогда сможешь безболезненно переключаться между ветками гита, вообще нихуя не вызывая лишний ребилд. А еще можно разместить кеш на билд-сервере. Тогда билд сервер собирает каждую ревизию один раз, а разработчики за несколько минут вытягивают объектные файлы без компиляции.А еще билдсервер можно оформить в виде кластера. Тогда можно юзать не один двухсокетный сервер с ксеонами, а пять. И честно компилить с нуля одну ревизию проекта-монстра за пару минут.
Что за хуйня? Разве он не должен переводить меня в диск D? Полный путь к папке выдает тоже самое, строку с путем показывает и снова предлагает выполнить из дефолтного места.
>>1365499Мало того, что не по теме, так еще и гуглится на раз-два. Нужно аргумент /D приписать в начале вот так:>cd \D D:/whatever
>>1365514Жрять, у меня до этого вот абсолютно точно так же открывался диск без аргумента /D, гуглил как только мог, видимо неправильные слова писал, спасибо
>>1365144>Полная сборка сократилась со 110 минут до 5 минут.Они там в один поток собирали? Откуда такая разница?
>>1365541>Откуда такая разница?вангую, что самоотверженный вчерашний студентик сравнивал полные ребилд проэкта со своим охуенным билдом через базел со включенным кешем ))
>>1365144>На винде сидит 2/3 всех разработчиков Это реально звучит как диагноз (и им по сути и является).
>>1365595Свою нейронную сеть без сторонних либ. Полезно, интересно и все преподы на защите будут кипятком ссать, я гарантирую это.
>>1365541Нет, собирали как обычно. Непосредственное время работы компилятора и линкера не уменьшилось.После перехода на bazel все девелоперские тачки стали выдавать побайтово одинаковые объектные файлы и бинарники на одной ревизии. Т.е. стало возможным кешировать и шарить все результаты сборки между разработчиками. CI-билдер при сборке каждой ревизии стал писать в этот кеш результаты, а все девелоперы стали тянуть объектные файлы по сети. Как результат: обновление до новой ревизии происходит за пару минут, переход между ветками тоже перестал требовать пересборки всего говна.Еще стало возможным собрать свою изменения на билдере значительно быстрее, чем на локальной тачке. Но это не очень удобно.На момент моего увольнения коллега внедрял bazel remote execution, чтобы можно собирать свои изменения на кластере прямо с рабочей тачки, но результат я застать не успел.>>1365554Да)) В этом как раз вся суть - уже 3 года bazel лежит на гитхабе, бери и внедряй. А 120 долбоебов даже не почесались, чтобы перестать страдать.
>>1365604>Т.е. стало возможным кешировать и шарить все результаты сборки между разработчиками. "Полный ребилд" - это когда все файлы проекта компилируются заново, без кэширования.
сап двач, прошу помочь с программой, ебусь целую неделю, нихрена не получается.Покажите на примере функции ввода вывода массива в/из файла. Конкретная задача: есть структура, которой я успешно заполняю массив (сериализация тип). Нужно заполнить файл этим массивом(А) в бинарном виде, после чего вывести эту бинарную кашу в другой массив(В). Массивы по итогу должны быть идентичны, но у меня получается ересь. Есть предположение, что весь файл записывается в первый элемент массива(не уверен в этом)Код скинуть не могу, слишком большой, да и прошу я примеры работы конкретно с бинарными файлами
>>1365608>>1365611Сборка проекта с нуля, когда ты только склонировал проект, занимает 5 минут вместо почти двух часов. Тебе-то что от того, что оно не пересобирает его у тебя на компьютере? Оно либо собирает его на кластере, либо берез из общего кеша, если ревизию собрали ранее. Тебя ебать не должно, ты можешь ПРОСТО начать работать.Это вопрос терминологии, не понимаю, почему ты за это пытаешься зацепиться, суть от этого не меняется. Судя по твоей боли от сугубо положительного результата, ты - истинный плюсовик.
>>1365634>либо берез из общего кеша, если ревизию собрали ранееЕще раз объясняю "полный ребилд" - это когда весь проект собирается заново, без кеша. То есть все файлы заново перекомпилируются. Твои 5 минут - это не "полный ребилд".>Это вопрос терминологииИменно. Вопрос терминологии, которой ты не владеешь.>Судя по твоей боли от сугубо положительного результатаБоль у меня исключительно от твоего неграмотного пиздежа.
>>1365634Обычным мейком ты тоже собираешь проект один раз, а потом перекомпилируешь только изменившиеся файлы. Т.е. вся суть твоей хуитки в том, что это сетевой кэш вместо локального.
>>1365654>полный ребилдЕще раз объясняю, что можешь хоть сто раз доебаться к слову "ребилд", твоя критика все равно будет выглядить как бессильная злоба. От вызова команды сборки на только склонированном проекте до продукта, который можно запускать или дебажить, проходит 5 минут вместо двух часов. Называй как хочешь, от этого ничего не поменяется.И это если говорить только о кеше. Упоминание распределенной сборки на кластере ты старательно не замечаешь. Как это назовешь, гений? Это не полная сборка? А что тогда?Ты просто типичный плюсовик-дегенерат. Ты ему про уменьшение среднего времени ожидания сборки проекта, а он тебе ВАШ РЕБИЛД НЕ РЕБИЛД.>>1365659Ага, теперь смени ветку и верни обратно, умник. Посмотрим, как перекомпилятся неизменившиеся файлы с изменившимся таймстампом. Bazel чекает хеш файла, а не таймстамп.
>>1365700>бессильная злоба>Ты просто типичный плюсовик-дегенератЖелезобетонные аргументы. Сразу видно настоящего профессионала.
>>1365737Мне ничего не мешает одновременно приводить аргументы и раскрывать суть твоей личности.Вот, подкрасил для тебя аргументы желтым, посколько из-за своей толщины тебе трудно их отыскать.
>>1365700да чувак, успокойсякеш-база базела, в которой по сути хранятся скомпилированные артефакты по каждой ветке и все такоеэто нужно для просто огромных команд и проектов, как раз уровня гугла и майрософтпримерно та же история что и к примеру, с серверами отладочных символов под каждый бинарный артефакт, у майкрософт издревне был такой артефактвсе это экономит время, даНО требует сопровождения, настройки и прочей поеботыв конпорациях вообще под это дело выделяют отдельных инженеровно для средних контор никто не будет тебе выделять на это времяа значит сопровождение всего этого ляжет на плечи обычных гребцовстарички это понимают, вот и не рыпаютсяа ты молодое еще видно, говно в жопе бурлит
>>1365758>а ты молодое еще видно, говно в жопе бурлит Судя по его стилю общения, скорее всего с ним большинство команды просто контактировать не захотело из-за токсичности. Он выше сам пишет, что 2/3 народа его замечательные инициативы молча проигнорировало. Потому что плюсовики-дегенераты.
Реально ли в плюсах поднимать хорошие деньги, не занимаясь серьезным байтоебством? Я сейчас только в начале карьеры и работаю над проектом, где это не так важно. Однако кажется, что за пределами моей конторы от плюсовиков (по крайней мере от синьеров) только этого и ждут. То есть не просто там архитектуру пк знать и немного ассемблер понимать, а прямо хардкорным эмбедом заниматься.
>>1366368С точки зрения кеширования концептуально мало чем. Bazel - это интегрированное решение. Там есть кеш(ccache, stashed) + код сервера для кеша, сборка на кластере(incredibuild, distcc) + код сервера, reproducible builds(когда ты явно указываешь все шаги сборки так, что в итоге для сборки продукта тебе нужен только базел и git репозиторий - все остальное скачается само и нужных версий), поддержка нескольких языков - например, вообще без костылей можно компилить клиент на джаве и сервер на плюсах, которые зависят от одного протобафа; можно создавать тестовое окружение, где скомпиленный бинарник прокидывается как ресурс для тест-раннера (да, да, никакой ебли с ручной настройкой тестового окружения). И все это счастье работает нативно(без msys) на винде.Это просто более взрослое и продвинутое решение, чем все остальное. С более серьезной командой, которая постоянно пилит новые фичи и устраняет баги.
https://pastebin.com/cXYN9bPWЗанятие в университете. Реализовать класс, добавить поля, в том числе с типом char* в приватную секцию, добавить геттеры и сеттеры для этих полей в публичную секцию, реализовать конструкторы инициализации и копирования, деструкторы. Продемонстрировать следующий функционал:создание и удаление массива экземпляров класса; использование класса; поиск или сортировку в массиве;использование конструктора копирования,конструктора инициализации; перегруженного метода.проблема такая: внутри сортировки вызывается деструктор и он освобождает память не по своему указателю в последнем элементе сортируемого вектора, пробовал создавать экземпляр, копировать его и удалять первый экземпляр- проблем нет, если из деструктора убрать delete - то все норм, но если оставить delete то и в конце программы, отсортированный векторне может корректно уничтожить свои элементы.Смотрел по шагам сортирует все верно все значения корректные но в самом конце сортировки освобождается память по указателю последнего элемента. Обходные пути не интересуют, объясните где у меня ошибка. с меня нихуя
>>1366527не, эт для меня, я прост проебал пару часов жЫзни на гугление, и не могу сообразить в чем проблема
>>1366528The type of dereferenced RandomIt must meet the requirements of MoveAssignable and MoveConstructible.https://en.cppreference.com/w/cpp/algorithm/sort
ТАК, БЛЯДЬ.Не был на собесах два года. Надо кабанчиком пробежаться по STL/boost. Есть какие-либо статьи чтоб по быстрому вспомнить, если все это дело знал наизусть 5 лет назад?
>>1366491>Это просто более взрослое и продвинутое решение, чем все остальное. С более серьезной командой, которая постоянно пилит новые фичи и устраняет баги. Ты менеджер по продажам, что ли?
http://www.cyberforum.ru/3d-modeling/thread2421226.htmlМожет кто помочь?На С++ реально написать гифрелейтед с сохранением в .gif?
>>1366716Эти ресурсы нужны для тренировки алгоритмического мышления, то есть ты учишься грамотно применять известные алгоритмы или выдумывать новые. Для изучания языков программирования они не подходят, а основная их цель -- подготовить тебя к собесам в силиконовые конторы (ну или в яндекс), где спрашивают подобные задачи.
Всем привет, недавно начали изучать кресты в шараге, решил стандартизировать знания и заполнить пробелы, выбрал книгу Бьерна Страуструпа "Принципы и практика использования C++", все верно сделал?
>>1366723На крестах реально даже твою мамку написать.>>1366733Книга норм, но будешь часто охуевать от ошибок в коде и тексте. Но особенный пиздец будет, когда дойдешь до рисования в gui через fltk. Но если пройдешь всю еблю, то нехило апнешь скилл.
>>1366745В стандартном с++ нету средств для графики.Так что либо ты кочаешь себе подходящую библиотеку, либо куришь алгоритмы вроде https://ru.m.wikipedia.org/wiki/Алгоритм_Брезенхэма и устройство .гиф
>>1366745>Друзья, покажите, пожалуйста, как это сделатьВозьми Qt, там есть QPainter, у которого богатые средства для рисования. Можно другую чисто графическую либу вроде skia или cairo, но они сложно настраиваются и устанавливаются. Начинающему тяжеловато будет. С библиотекой для gif тоже лучше не париться, а сохранить последовательность картинок, которые потом сконвертировать в гиф imagemagic-ом.
>>1366733>заполнить пробелы«Принципы и практика...» не для этого писалась, она энтрилевел. Для заполнения пробелов у него другие книжки.
>>1366783https://github.com/mtrebi/matrix-multiplication-threadingя просто этот код переделал:время выполнения убрал
>>1366762> С библиотекой для gif тоже лучше не париться, а сохранить последовательность картинок, которые потом сконвертировать в гиф imagemagic-ом. Алсо, чтобы тяжёловесный Qt не ставить, можно заюзать какую-нибудь либу. SDL или SFML например
>>1366827>SDL или SFML например Там векторной графики нет. Только спрайты и текст. В SFML немного есть, но хуже QPaintera.
>>1366582То, что ты знал 5 лет назад, уже не используется, сейчас нужно юзать только новые стандарты с пометкой на улучшение в будущем, заглядывая в черновики будущих стандартов. Иначе говнокод
>>1366741>почему Эта книжка писалась как университетский курс для полных снулей в программировании. Ответы на вопросы почему у него так, а не иначе в Главе 0 + он дает ссылку на свой сайт, где есть более подробные рекомендации к каждой главе + на хабре есть перевод этих рекомендаций.>работа со строками там так далеко находится?Базовый ввод/вывод он дает с самого начала, этого достаточно.Работа со строками сама по себе может быть достаточно муторной и не всем интересна. Типа не хотел демотивировать учеников. Алсо, конкретно в плюсах она еще и основывается на таких средствах языка, которые в двух словах не объяснишь в самом начале.
Поясните, есть примерно такой код:void RecursiveFunction (Myfuckingclass A,..) {if (something) { A.modify() // как-то изменить ARecursiveFunction(A, ...) }}MyFuckingClass A;A.print // изначальное значениеRecursiveFunction(A,...);A.print // то же значение, будто ничего не произошлоПочему она не меняет класс? Нельзя как-нибудь по ссылке передать?
>>1367089>>1367092бля тривиальщина, аж стыдно, но все равно спасибо. Ссылку на обьект дал, а на сам класс не дал.
>>1367093Че ты несешь.Класс - это абстрактное описание некой сущности.Объект - это уже воплощение этой абстракции.
Пачаны, накидайте годного материала по нейроночкам на наших любимых крестах. Гайды, примеры, исходники - вот это вот все.И гляньте чо зелёные натворили, вообще уже ебнулись https://youtu.be/p5U4NgVGAwg
>>1367098Я сам когда-то на плюсах нейронку писал - НИГДЕ в интернете нет нормального описания обратной пропагации не то что каких-нибудь backward convolution - а обычного слоя свёртки (с нетривиальными значениями dilation, шага и пэддинга). Только листок бумаги и исходники Caffe тебе в помощь.
Как вложить класс в класс если классы раскиданы по нескольким разным сpp и h файлам?Помогите, гугол выдает какую то хуету.
>>1367192В серьезных книжках формулы все есть. Берешь их и кодишь. Подразумевается, что ты достаточно умен для этого. А если нет, то используй Python + ML фреймфорк на свой вкус.
>>1367227Forward declaration наверное ищешь.headerB.h:struct A;struct B { A* a; };headerA.h:#include "headerB.h"struct A { B b; };
>>1367257В книжках и статьях (даже самого ЛеКунна) везде говорится "да там обратная пропагация, оно само всё. Вот простой пример для padding=0, stride=1, dilation=1, а для других сами разберётесь".
>>1367262Лол, возможно ему вообще нужна обычная композиция или агрегация.А такое как у тебя лучше сразу разруливать абстрактными интерфейсами, чтобы потом не огрести.
>>1367651Какая система? В каком смысле "нет в метаданных"? Если венда не сгенерила и в кэше у неё нет thumbnail-а, то можно забрутфорсить.Берёшь ffmpeg. Демуксишь, декодируешь n-ый кадр. Вот тебе ноготь большого пальца.
>>1365137 (OP)Для интереса пишу на с++, почему у меня default random engine все время показывает одно и тоже значение >default_random_engine randomGenerator(time(0)); >uniform_int_distribution<int> roll(1,6);Если я например три раза вызову, то остальные будут рандомными, а первое всё равно одним и тем же
Почему во всех вакансиях требуют знание Boost? Там ведь половина либы перекочевала в стандарт, а остальная на подходе, да и функции там далеко не уникальные. Легаси поддерживать?
>>1368244Да.Ты не переживай, я на работе недавно переписывал легаси, написанный на расширении крестов от Borland C++ 2002 года
Ознакомился с заголовочными файлами (tobish .h).Не могу понять.Поясните, можно ли писать в заголовках содержания функций, не только, просто, прототипы.Если нельзя/не принято, почему? Проясните ситуацию, не хочу тупо разделять функций на 2 файла, где в одном - прототип, а в другом - уже функция.
>>1368335Потому что деды так делали - и ты так делай.Серьёзно, если это твой первый ЯП, то лучше сейчас тебе в этом не пытаться разобраться, а просто принять.И лучше начать изучение с чистого С.
>>1368339Явно не первый. У C нет классов, поэтому для меня он сосёт, простите меня владельцы C.А так, выяснил, что можно взять при себе 3 файл (.cpp, но не главный) и туда поставить содержание функций.Главное не забыть присоединить заголовок к нему.
>>1368335Не прототипы, а декларации.Надо для инкапсуляции и для того, чтобы при изменении внутреннего устройства функции не приходилось перекомпилировать все файлы, использующие этот ашник.
>>1368335Вообще можно, только придется писать перед каждой функцией ключевое слово inline. Почему так и зачем гугли ODR (one definition rule).
>>1368392Что не так? Не хочешь писать - разделяй на интерфейс и реализацию или хуярь на шаблонах (их нужно писать в заголовочном файле).
Как при файловом вводе вернуть каретку в самое начало файла? Допустим, я хочу сначала посчитать количество строк в файле, а потом уже запускать алгоритм.
>>1368677перепечатай эту ссылку руками, чтобы симулировать подобие самостоятельной деятельностиcplusplus.com/forum/beginner/30644/
Так, ладно, я понял, что cin не читает управляющие символы. Как это исправит? Я уже пробовал искать решение, но так и не нашёл (искал только на Русском языке, потому что других не знаю).
>>1368706Английский язык в не англоязычных странах используется в основном только в IT и то не всегда, 1C тому пример. А команды на любом языке можно просто выучить.
>>1368707>используется в основном толькоПлюсы тоже применяются в основном только в айти, и то не всегда. У английского намного больше сфер применимости, чем у плюсов, но ты зачем-то решил учить плюсы.
Вот скажите, как сейчас обстоят дела на рынке труда у крестов? Собираюсь скоро РАБотать, не могу определиться с языком. Да-да, важен не язык, а скилл, алгоритмы, структуры и тд - это понятно, но все равно на сам язык время потратить надо. Речь идет не о базовых конструкциях, их я изучал еще лет 6 назад, а про всякие STL, boost, новые стандарты и тд. Плюс сделать небольшой проект - два для резюме. Мне не оче нравятся всякие жабаскрипты, похапэ и тем более всякие электроны. Да, вакансии есть по плюсам, но я хотел бы узнать, ведутся ли НОВЫЕ разработки, куда можно пробиться при достаточном упорстве. Те не легаси и переписывание на реакты. Вообще меня больше привлекает лоулевел, но в рашке за всякие микроконтроллеры платят мало, поэтому готов хотя бы на полшишечки пилить что-то на плюсах. Но, если что-то пилят только во всяких яндексах, где нужно пройти 20 собеседований и потом раздвигать булки, то я бы и не прочь пойти веб макакой, получая свои 300к/нсек и играться с сишкой по выходным, может участвуя в каком опенсурс проекте. В общем, мой вопрос такой: стоит ли в 2019 пытаться ворваться, при условии, что по большей части нравиться само программирование, пусть даже и веб, но все такие хочется ближе к системе? Немаловажную роль играет зп в перспективе, но я был бы готов получать НЕ СИЛЬНО меньше и при этом потратить БОЛЬШЕ времени на изучение. Но если разница в ЗП в полтора раза, а знать надо в 3 раза больше, то я бы положил на эту затею. В идеале я бы пилил модули для линупса, но такого в рахе я вообще не видел, может одна вакансия для моржей с 10 летнем стажем.
>>1368719>кидаешь список подходящих функций>он называет тебя пидором ебанымбольше никогда не буду помогать незнающим английский, они же ущербные, реально.
>>1368711Кресты один из самых популярных языков программирования, много где применяется. Его изучение поможет в изучении других Си-подобных языков, в том числе JS. Лучший язык программирования, чтобы начать учиться программировать.
>>1368725Учиться программировать я уже умею. С указателями бодался, в сокеты долбился, системные вызовы юзал и тд. Речь идет о том, что конкретно задрочить все основные либы и новые стандарты непосредственно для того, чтобы пойти работать джуном. >>1368727Питухон я знаю и часто использую, мне он нравиться, но на нем в основном вакансии по Data Science и джангам. Как я уже сказал, я и не прочь в принципе, просто хотелось бы поближе к байтикам. Вообще бы в идеале писал бы питоновские модули на си, потом бы их соединял питоном и наворачивал юниттесты. А для Data Science и всяким ML нужно еще перед этим статистику учить, она у нас в шараге была, но сказать, что я ее знаю не могу, хотя еще помню про нормальное распределение и простые задачи.
>>1368719А ещё круче то, что istream::getline сделал бы то же самое, а код бы выглядел куда короче.P.S.: открывать файл в одной процедуре, а закрывать в другой - хуйня.
>>1368739двачую, создаёшь буферную строку, while getline увеличиваешь счётчик и возвращаешьпосле таких тредов понимаю, что язык реально сложный, но с кучей полезных инструментов
>>1368725>Кресты один из самых популярных языков программирования, много где применяетсяпо количеству ваканский и не скажешьсижу и плачу, неужели ебаную жабу учить придётся
Это перепост с ньюфаг треда, т.к. сказали что тут есть люди работающие в этой области:>Есть тут господа совмещающие программирование в linux с работой с железом? >Очень хочется получить структурированные знания по тому как вообще происходит написание драйверов под линухом, как это всё вяжется с device tree, что за node module блять и тд. Существует ли такая литература, но не состоящая из кучи отдельных статей в инете, а именно в одном источнике, хотя бы в каких то базовых аспектах?>И порекомендуйте плес какие-нибудь хорошие книжки по C для написания всё тех же драйверов.
Бляяяя, какое же винда дерьмище ебаное. Все вилкой вручную собираешь. С САЙТА БЛЯДЬ КАЧАЕШЬ. Дельфимокрыеписьки скочать бесплатно. Как в 90-е нахуй.
>>1368819>сижу и плачу, неужели ебаную жабу учить придётсяона проработаннее и технологичнее, чем плюсы. А еще там есть нормальная IDEмимо-ушел-с-плюсов-на-джаву
>>1368819>неужели ебаную жабу учить придётся Жаба удобнее, чтобы 5/8 на дядю пахать. Стабильность и минимум приключений.
Почему если я пытаюсь преобразовать 6.0 в 6, то получаю 5, хотя с остальными числами всё в порядке? Как это исправить? Преобразую через цел_пер=(int)вещ_пер.
>>1368917Я на программиста учусь, на первом курсе сейчас. Мы по идее это прошли уже, на лабе в понедельник будет задание на C++ с массивами структур, бинарным файловым вводом/выводом и всё это будет через жопуфункции. F yf
Хеллоуворлдщик в треде.Что делать если одна и та же программа компилируется в консоли с ошибкой, а в визуал студии без ошибок? Не выёбываться и учиться пока что только в рамках визуалстудии?
>>1368992>программа компилируется в консоли с ошибкойГуглить код/текст ошибки, не?>Не выёбыватьсяТут нужно чувствовать баланс. Если совсем не выебуваться, то станешь омеганом.>учиться пока чтоУчиться нужно всю жизнь и все рано дураком помрешь
>>1368973Вот, накодировал.https://ideone.com/xYdWu6Кто-нибудь, можете сделать это менее ковнокодисто? Там надо a.b превратить в a, b и сравнить что больше. Код выглядит так слёзотворно, потому что по условию задания нельзя было использовать что-то кроме stdio.h, а нельзя было также массивы и циклы, только условия и всё.
Здрасьте.Нужно написать программу. Суть в чём, есть структура из переменных типа int, float, char. (её я уж сам заполню). Нужно записать структуру в бинарный файл. Препод творил такое:--------------------------------------//объявлял тут структуру Аchar Mas[sizeof(A)];//Сериализация сруктуры Аchar ptr = (char)&A;for (int i=0;i<sizeof(A);i++) Mas=*(ptr+i);----------------------------------------------------------Мне нужно сделать примерно то же самое, вот только у меня в структуре есть элементы типа char, и фокус с указателями на тип, я так понимаю, не прокатит.Запись массива в бинарный файл я сам смогу оформить, а вот как мне массив заполнить этой структурой я толком не понимаю. памагити
>>1369053>Препод творил такое>вот как мне >я толком не понимаюСпросить у препода, даун.Ты, блядь, чего ради бабло за обучение отдаешь, мудило?Нормальный препод будет только рад объяснить даже внеурочное время.А если нет, то это твоя задача, чтобы таких пидоров среди преподов не встречалось.
>>1369068ну зачем оскорблять то сразу.Препод сказал искать инфу в инете, и я с ним согласен, инфу нужно учиться искать самому, программирование это вам не русский язык.Бабло за обучение я не отдаю. Препода вовлекать в этот вопрос не хочу
>>1369053> сам смогу оформить, а вот как мне массив заполнить этой структурой я толСхуяли оно работать не будет? Обрати внимание что у тебя там указатели не на тип, а на чар. Та хуйня со всем работать будет (пока отсутвие стандартизированого ABI тебе хуйцом по губам не проведет). Естественно если у тебя в структуре указатели на что-то (в том числе виртуальные функции) то ты соснешь.
Бля, как же меня уже заебал ебучий впф, сука. Впф - это просто кусок сырого непроработанного говна, где ничего не работает, где запилено дохуя говнофункций, которые нигде не используются или замещают друг друга. А впф плюс мввм - это вообще говно мочи. Есть, блять, удобный code behind, где ты спокойно запиливаешь все эвенты, но НЕТ, сука, нельзя так делать, ведь тогда швятой мввм не соблюдается и нужно запиливать все эвенты через злоебучие команды, которые работают через жопу и требуют миллиард дополнительных строк нечитаемого кода. А некоторые эвенты вообще хуй через команды сделаешь. И хули делать? Вот, кто, сука, решил, что чистый code behind - это хорошо? Его что, блять, по приколу что ли запилили?
>>1369053Ifstream file("file.txt");file >> reinterpret_cast<char>(%переменная твоей структуры%);В памяти члены простых типов структуры пишутся последовательно(читай: структура с вектором, например, внутри уже так не должна привестись к массиву чаров) - берешь и пишешь ее как массив чаров в файл.Хочешь писать сразу структуру - перегрузи оператор >>.Наоборот тоже верно - можешь считать с файла данные в преобразованную к char структуру. Но это уже придется делать через метод read, а не через <<.Посмотри методички работы винапи с изображениями - точно увидишь там такое.
Какую команду для ввода из файла использовать, чтобы в char можно было записывать пробелы и всё такое?
>>1369167>Сиддхартха РаоНу у тебя кароч откроется сахасрара и вишуддха, лингам вырастет на 2-3 см.Ты издеваешься? В этой книженции в три раза меньше страниц чем в стандарте на кресты, а предполагается что она тебе еще что то доступным языком должна объяснять.
>>1365137 (OP)Анон, сколько приблизительно времени придется потратить для изучения основ С++ (включая поверхностное изучение стандартных и популярных библиотек), дабы его знание можно было без страха добавлять в резюме как второстепенный язык?У меня 3 года опыта Си, и вообще я всегда на хую вертел этот с++, но буржуи в своих вакансиях почему-то постоянно его требуют. Хуй знает, где они там хотят в эмбеддед его использовать может гуй ко всякому говну будут заставлять писать, но этот пробел в знаниях меня напрягает.
>>1369320Месяцев шесть в проде, чтобы освоиться с дефолтными либами и новыми фичами языка. Но лучше потратить это время на java/scala/rust, потому что и приятнее, и зп больше. На джаве/скале бигдата HFT, на расте блокчейн и перекатываются из HFT, а так же прочие нуждающиеся в железобетонной стабильности/секьюрности.
>>1369320>>1369335Сорян, не увидел эмбедед в твоем посте. Тогда 2 месяца на подмножество фич, которое разрешено в embedded. (Простенькие классы, шаблоны, consexpr, модули)
>>1369320ну, щас типа тред что кресты в ембенд лезутте не тупо новые компиляторы использовать, те приплюснутый си, а по новому кодитьтипа отказываться от макросов, заменяя кодогенерацией на шаблонах и метапрограммированием и все такоедаже stl пытаются начать пользовать, тк уже реально писать работающие аллокаторы на новых стандартов, до этого они были по сути нерабочиетипа новая мув семантика позволит не проседать в производительности, но повышать уровень абстракциии все такоеи прочеено все упирается в тупость ембед кодеров, тк там хуевые зарплаты и надо дохуя знать в предметке, в электронике, на изучение языка времени не остаетсявообще эмбед это чаще всего спагетти дрисня на макросах, write-only код
Извиняюсь что тупизна да еще и не по теме, но в ньюфагаче молчат, а в гугле я не могу найти:Как в VS поменять ТОЛЬКО фоновый цвет редактора? Не тему, не полностью загружать цветовую настройку, а только цвет фона? Где блядь эта ебучая настройка? Уже по списку прокрутил просто все настройки цветов, просматривая любое совпадение по фону, и все равно нихуя не нашел.
>>1369341>>1369342>>1369375Я 6 лет писал на C/С++, полгода назад устроился в проект, где новый код пишется только на Rust и интегрируется с легаси на C++. Так что да, я тот "дебил". А ты можешь сходить нахуй и не семенить в двух тредах, поскольку у тебя ни опыта, ни знаний, если судить по твоим постам.
Сохраняю файлы, жму билд, жму дебаг, а изменения сделанные в коде не появляются.Если почитстить билд или сделать ребилд и потом запустить дебаг все изменения срабатывают.В решении несколько файлов.Как это пофиксить, чтоб не надо было каждый раз чистить билд и хватало бы просто начать дебаг ну или хотябы просто чтоб билд обновлял код. Только только вкатился в с++, юзаю вижуал студио.
>>1369420https://code.visualstudio.com/docs/getstarted/themes#_customizing-a-color-themeТы прикалываешься?
>>1369338Собственно где-то так я себе это и представлял, спасибо>>1369383>ну, щас типа тред что кресты в ембенд лезутХм, а есть примеры чего-то серьезного, где с++ используют больше, нежели как си с классами?Я, наверное, только AOSP могу вспомнить, в котором и шаблоны, и куча всякого специфического плюсового говна используется по назначению, дабы сделать код максимально портабельным и простым. Но ондроед - это такой себе пример эмбеддед, да и все-равно они там кучу кастомных ужасных генераторов навасянили (например, https://source.android.com/devices/architecture/hidl).Вообще в эмбеддед зачастую нет таких задач, где бы это мета-говно помогло, а не навредило. А в тех, где оно действительно нужно, васянятся свои несложные генераторы.>там хуевые зарплатыНичем не хуевее остальных. Отрасль же большая, если не учитывать кузьмичей на заводе, то зарплаты очень даже на уровне по крайней мере я доволен
>>1369414про "дебил на месте" написал другой мимоанон (я) единственно в замечание забавного подтверждения догадки "это ты тот дебил из Си треда?" боевым призывом "раст, сучки" обращенным к треду (ОП)
>>1369426Визула Студия хочет моей смерти, не иначе. Я даже уже тулзу скачал чтобы темы ставить и редактировать и все равно не могу найти в каком параметре редактируется фон редактора, все что угодно, каждый пиксель, цвет значка закрытия вкладки при наведении, но не цвет фона редактируемой вкладки.
>>1369610У меня похоже баг и у меня реально не меняется цвет фона, еще пара цветов игнорится, так что дело в другом видимо.
>>1369652Я буквально чуть ли не вручную менял все цвета у которых были указаны Background, видимо проебался и пропустил
>>1369403в vs есть аддон добавляющий цветовые схемы вообще тои там много уже популярных схем сделанопользуйся
>>1369723есть 2 контейнерав первом по старинке храняться указатели на объекты, не сами объекты, вставка работает быстрово втором храняться сами объекты, тогда чтобы вставить новый объект в контейнер, нужно создать объект аж три раза - свободный объект, потом при передаче его в контейнер создасться фактический параметр, а потом уже из фактического параметра создадуют внутренний объект в контейнереа мув-семантика позволяет всего лишь оптимизировать второй случай - будет не три, а два раза создан объекти получается что хранить объекты по указателям все равно быстрей с точки зрения вставки
Так, мужчины, перекатываюсь с С на плюсы (обратно).Что почитать посоветуете, учитывая, что с базовым синтаксисом знаком, отличие указателя от ссылки знаю, но в классах и во всем таком после 99 года не шарю совсем?
>>1369761>отличие указателя от ссылки знаюкхе, кхето что типа ссылка всегда должна быть инициализирована все знают.. это не обсуждаетсяа ты лучше скажи мне другие отличия..
>>1369757Я надеюсь, ты сложные типы гоняешь через ссылки? К чему это все? Зачем по твоему конструкторы для move?
>>1369761>но в классах и во всем таком после 99 года не шарю совсемС C++03 в кишках классов ничего не поменялось. Добавили наворотов в библиотеки, лямдбы, constexpr, вывод типов, memory model и все. Скоро добавят концепты и модули и по мелочи
>>1369806Да я че ебу? Ну был там способ сделать функцию lvalue возвращая ссылку.Я потому и спрашиваю книжку, так как не знаю нихуя кроме сишной базы.
ну, епт, давайтекто еще про отличие ссылок от указателей знаетодним словом можно отписаться, чтобы хотя бы знать шо тут не одни студенты, нах
тут подумал, вроде как получается что мув семантика - это не про то как оптимизировать производительность, а всего лишь еще один синтахсический сахарок, внезапнотак как все равно если вам нужно действительно быстро вставлять-заполнять какие-то контейнеры, то все равно вам придется хранить в контейнерах указатели на объекты, а не сами объектыхотя, скорей всего, я чего то не понимаютак как практики у меня не было уже несколько лет
>>1369859Классы - синтаксический сахарок. Можно в структурах хранить поинтеры на функции. C++ не нужен.
>>1369859> если вам нужно действительно быстро вставлять-заполнять какие-то контейнеры, то все равно вам придется хранить в контейнерах указатели на объекты, а не сами объектыТы время создания объектов учитываешь в "действительно быстро"? По одному создавать объекты гораздо медленнее, чем выделять память большим куском, как это делают контейнеры. Плюс доступ по указателю почти всегда медленнее, чем по значению.
а, похоже, понялмы должны не только контейнер обеспечить операциями вставки с поддержкой мув-семантики, но и класс хранимого объекта обеспечить мув-конструкторомтогда магическим образом у нас будет не 3 раза создания объекта, а всего лишь один
хотя остается другой вопрос - а именно когда необходимо сохранить возможноть динамического полиморфизма для объектов контейнератогда все равно нужно по старинке хранить указатели, а не сами объекты в контейнере
>>1369879не передергивайодно дело то что язык си позволяет эмулировать ооп, другое дело когда возможности ооп встроены в язык на уровне семантики
>>1369931Тут всегда есть трейд-офф между скоростью работы и гибкостью в поведении. Что именно ты выбираешь зависит от задачи. Правда, если ты не научными вычислениями, эмбеддедом, хай-лоадом или (софт) риал-таймом занимаешься, то тебе обычно большая скорость и не нужна.Есть ещё третий вариант, компромисс между этими двумя - хранить tagged union/discriminated union/variant и вручную диспатчить нужный метод.
>>1369937> tagged union/discriminated union/variant и вручную диспатчить нужный метод.дык это ж олдскульный сишный подход к обеспечению динамического полиморфизма, не?
а хотя в бусте каких только контейнеров нет!и интрузитивные, и для хранения полиморфных объектов, и основанные на вариантах..
Как правильно задать массив пар?typedef pair<int,int> arrayofpairs[]arrayofpairs a[5] // еггог declaration of arrayofpairs as multidimensional array must have bounds...
>>1369973Но у него есть несколько недостатков.1)Размер всегда равен размеру самого большого элемента. Нагрузка как на память, так и на кеш.2) Собственно, падение производительности из-за хождения по указателям в оригинальном случае у тебя переходит в падение производительности из-за постоянной проверки, какой "тип" сейчас обрабатываем. Бранч предиктор / бранч таргет предиктор - не магия. В обоих случаях это решается сортировкой по типу.Но в 99% случаях это всё на фиг не сдалось, испоьзуй обычный контейнер.
>>1370096ну дык ты пытаешься задать массив массивов вообще то..и получается что у тебя первый массив (который в тайпдеф) неполного типа, без границ..
>>1367098В нейронках важен не язык или фреймворк, а понимание нейронок.Если ты в них ничего не понимаешь, то сделать что-то нормальное полностью сам ты не сможешь.
Посоны, а вы в функциональном стиле пробовали в продакшене писать на плюсах? Я вот смотрю на всякие там линзы хуинзы и не могу представить что бы я все это в свои проекты бы пихал когда-нибудь. Монады применял пробовал, лучше код не стал. Расскажите как у вас.
>>1370206Ты бы на Хаскеле такие вещи делал а не в плюсах. >линзыКак ты их через плюсовую систему типов собираешься профункторную оптику реализовывать?>монадыОни хорошо представляются через конструктор типов. В плюсах конечно можно сделать "template <typename> typename M", но так делать не нужно.
>>1370259>Ты бы на Хаскеле такие вещи делалЯ ж говорю в продакшене>Как ты их через плюсовую систему типов собираешьсяhttps://www.youtube.com/watch?v=7vyNRD1TRYs>но так делать не нужноРасскажи почему. Я еще не определился просто.
>>1370273Ебать ты говноед, пиши на расте или скале, они как раз функциональные. Нет, буду жрать говно, буду на плюсах.
>>1370206дык смотри: когда раньше делал метапрограммирование на старом 98 стандарте плюсов, ты вынужден был писать в функциональном стиле: понятия состояния у тебя в компайл тайм в принципе не было, итераций не было, поэтому заменяли это рекурсией, точкой останова в которой была точная специализация шаблона, условных конструкций (кроме оператора ?:) то же не было, поэтому использовали некое подобие паттерн матчинга - частичные специализаций шаблов и плюс принцип sfinaeа, внезапно, с новыми стандартами ты те же самые вещи можешь делать итерактивно, через value based подход
>>1370302а да, так как состояния не было, то ты вынужден был вместо модификации какой-то сущьности порождать новуютипичный пример - операции со списком типов: добавление, удаление, сортировка и прочее не изменяли по сути существующий список типов, а каждый раз порождали новыйнадо удалить элемент - порождаешь новый список но без этого элементанадо добавить элемент - порождаешь новый список с этим элементом
>>1370306Я это понимаю, но все-таки ФП это много различных концепций и иногда думается что можно было бы использовать их не только в компайл тайм. Постепенно же идет миграция различных подходов из в ФП в традиционные языки программирования, значит что-то за этим есть) Но вот что народ использует в реальных проектах из того что еще языком не поддерживается, но можно реализовать, пусть и через жопу. Кто использовал линзы, функторы, рэнжи и прочие страшные слова? Есть ли реальный выхлоп?
>>1370294Они оба мультипарадигменные ащета. Ну и вообще я не пишу на каком-то языке, я решаю задачу. И для решения задачи подбираю лучшие из имеющихся инструментов и стараюсь использовать лучшие из выработанных практик. Так что не бомби там давай.
>>1370323> И для решения задачи подбираю лучшие из имеющихся инструментов и стараюсь использовать лучшие из выработанных практик>Функциональный стиль>C++Мань, давай ты не будешь строить из себя большого профессионала?
>>1370273>Расскажи почемуВо-первых, потому что не только система типов плюсов не предназначена для такого стиля, но и сам синтаксис. То, что в хаскеле f >>= g, в плюсах будет std::function<M<b>(const &a)> f, std::function... ну ты понел.Во-вторых, потому шаблоны это... шаблоны. Твой чувак из видео показывал примеры того, что компилятор выводит в случае ошибки? У него бы 40 слайдов бы не хватило.В-третьих, такие фокусы увеличивают время компиляции на n порядков и ухудшают перформанс в дебаг-сборке, в которой ничего не инлайнится.В-четвёртых, плюсы всё-таки императивный язык. Если ты хочешь обратится к a.foo, бери и обращайся. Суть линз в их композиции. Нафига она тебе здесь? Ты пишешь энтерпрайзные круды и опердени на плюсах?
>>1370391Спасибо за ответ. К моему списку аргументов прибавился твой второй пункт. Он, конечно, спорный, ибо высер компилятора и так ад и израиль, уже все свыклись. Но все же не стоит делать его хуже. Остальные аргументы я сам использовал в дебатах. Еще добавлял отсутствие саксес стори с этим ФП. Насчет перфоманса - он проседает и в релизе когда ты напрочь отказываешься мутировать структуры даже там, где это гарантировано валидно. Еще поддерживаемость кода сильно падает. Все-таки это не самые простые концепции, их не каждый студент поймет, а на плюсы и так тяжело искать людей с руками не из жопы. В общем я не вижу причин использовать вещи типа ФП в кровавом энтерпрайзе, но если мне покажут пруф концепт и саксес стори я готов изменить свое мнение и попробовать. За этим и пришел)
>>1370320ну смотри, самое простое применение функциональных подходов в крестах, это правильное использование stl:а именно ты же не используешь итерацию и условные операторы для работы с контейнерами, а ты делаешь выборку из элементов контейнера, удовлетворяющих определенным условиям а далее применяешь операцию к выбранным элементами то и другое задается функторами, а способов сделать это в крестах предостаточно - от указателей на функции, функторов на класса, до лямбд, причем вокруг этого есть необходимый инструментарий, всякие bind, mem_fun, обобщенные лямбды и прочее и прочее, включая и набор паттернов связаных с функторами на классахтот же функциональный подходдаже если открыть любую книжку по stl, она будет полна функциональных подходовтак чтож, дана практике в крестах функциональный подход используют для метапрограммирования тк там не было выбора по сути (до новых стандартов), а метапрограммирование уже используется для кодогенерации и для реализации некоторых паттернов программирования в статическом стиле (в отличие от подхода gof, в котором паттерны в основном реализовывались посредством агрегации и с использованием динамического полиморфизма, те они работали в рантайме по сути, в общем подход во многом был взят из симулы и смоллтолка)и, второе применение функционального подхода - это правильная работа с stl и с любыми контейнерами и алгоритмами (тот же буст) что сделаны наподобие stl, а не дрисня из for по контейнеру с лапшей из if
Аноны зацените фичу https://github.com/Neargye/nameofПозволяет еним в стринг перевести, получить названеи класса, переменой етк.NAMEOF(person.address.zip_code) -> "zip_code"NAMEOF(foo<int, float>()) -> "foo"auto color = Color::RED;NAMEOF_ENUM(color) -> "RED"using T = int;NAMEOF_TYPE_T(T) -> "int"
>>1370433>Позволяет еним в стринг перевести, получить названеи класса, переменой етк.Но только в компайл тайм.В кюте ты это можешь делать в рантайме, плюс узнавать имена вызывающего тебя метода, класса и т.п.
А я могу пихать сишный код в проект, если, например, аналогичный код на плюсах будет оверхедом по производительности? Я имею в виду, в сам код. Что то вроде "extern c".
>>1370538Вот это может не прокатить, мол, попытка инициализировать списком инициализации, а 5 - нихуя не пара интов.Может, в случае со сложным типом внутри нормально компилятор разрулит, но когда я так пытался вектор чаров определить, он не съедал.
Какую книгу стоит прочитать чтобы побольше узнать где могут аозникать неочевидные неопределенные ситуации?А то недавно я например с таким столкнулся: у меня был базовый класс с виртуальными методами, я от него унаследовал ещё один, переопределил там нужные методы и потом в статической памяти создал экземпляр этого класса. Всё было в целом хорошо, вот только указатель this(или обращение к какому-то члену, забыл уже) иногда давал неверное значение.
>>1370638Какие матрицы? Если ты про 3D-графику, то там, кагбэ, сразу тысячи их, вектор3 на матрицу3x3 множится для каждого условного пикселя. Сразу говорю, я по этой части не Википедия, просто игрался OpenGL (GLSL).
Я хочу сделать функцию-член класса, которая должна обрабатывать только указанные свойства класса.То есть есть список свойств класса, а в вызове функции я указываю только некоторые из них, а другие останутся нетронутыми. Причем в вызове функции могут быть любые свойства класса и любое количество.Такое вообще возможно реализовать, или это маняфантазии???
>>1370991На вскидку в голову приходит или цепочка методов аля встроенный дсл, или именованные аргументы как тут https://www.fluentcpp.com/2018/12/14/named-arguments-cpp/ но полностью как ты хочешь не знаю как реализовать.
>>1370991>есть список свойств классаЕсли у тебя действительно есть такой список, то не составит труда запилить отдельный список только тех свойств, которые нужно изменить, пробежаться по такому списку тоже много ума не надо.Соответственно твоя функция-член должна принимать в качестве параметра такой список.
>>1370991>свойства классаtype traits что ле? какие - бустовые или с++11? о чем ты там бормочешь вообще?
>>1371005А хотя не, знаю, в кюте же есть рефлексия. Можно в рантайме получить список пропертей класса и работать с ними.
>>1371017Не знаю насчет плавать, но насчет танцевать - это реально. Если тянка хорошо двигается в танце, значит у нее хорошая пластичность и мышцы хорошо развиты. Значит и в постели хорошо будет двигаться. Это и к кунам относится кста.
>>1371033теоретик детектед. Если все хорошо с возбуждаемостью, то в 9 случаях из 10 секс - это долбежка с произвольной скоростью, где развитость мышц до пизды.
>>1371018При отладке boost::variant слишком много всяких оберток приходится проходить. В std::variant пишут - поменьше. Надо будет аккуратно перенести.
>>1365137 (OP)Доброго дня анончики.Вопросы у меня есть.Каким образом узнать скольки ядерный процессор установлен на ПК, на котором запускается программа?Как распараллелить двухмерный массив?Как пример того, что я хочу узнать смотрим на картинки. На первой как в случае с одним потоком, на втором как с несколькими, и тут либо часть массива, кратная количеству потоков обрабатывается каждым ядром, либо каждая энная строчка.Pragma parallel пробовал, не то.
>>1371404> if (Array「 i 」「 j 」 = 16)В цпп компиляторы до сих пор не завезли предупреждения для таких случаев?
>>1371416Всё таки пропустил, смысл в сравнении, а вообще смысл в некой проверки, забыл добавить, что в моим примере речь только об чтении неких данных и сравнении их с чем-то.
>>1371404>Каким образом узнать скольки ядерный процессор установлен на ПК, на котором запускается программа?Лучше используй std::thread::hardware_concurrency - это сколько реально ты сможешь заполучить.
>>1371427А как это работает?Я правильно понимаю, что перед этим мне необходимо создать некоторое количество потоков? А потом уже запускать массивы в этих потоках?
Как в C++ удалить строку из файла? Есть ли функция, которая в находясь в цикле удаляет каждый символ, начиная с места, на котором стоит каретка до, например, символа переноса строки?
Был тут недавно на собеседовании где спросили у меня такое:есть структура с несколькими полями, которая выступает в качестве ключа в map'e. Как из этой map'ы получить значение по одному из полей ключа(который структура)?
>>1371635Ну короч тебе нужно вычесть оффсет поля внутри структуры из фактического адреса поля и получить базовый адрес структуры-ключа. Я хуй знает как это сделать, но уверен, что так можно. Это же си++.мимо жаба
>>1371670Это жи собес. Тут не важно кто как пишет в продакшн, тут главное обоссать петушка и выпиздить его нахуй.
>>1371635Вот этот прав кстати >>1371638for (auto const & keyVal : map){\t if (keyVal.first.m_field == to find)\t\t vals.emplace(keyVal.second);}
>>1371638>>1371673Короче хз, наверное не так объяснил. На примере будет нагляднее.struct A{ int m_a; double m_b;};map<A, int> mp;Ключ в данном случае - экземпляр структуры А, получаем значение по ключу - map[obj], или итератор - map.find(obj), где jbj - экземпляр A.А им хотелось так:map[obj.m_a];map[obj.m_b];
>>1371689A a1{1,2};A a1{2,3};mp.insert({a1, 1});mp.insert({a2, 2});mp.find(2); <--- Ничего не найдет, а они хотели чтобы нашло
Я уже всю голову сломал, выручайте.Короче, такая задача. > Дан символ C и строки S и S0. После каждого вхождения символа C в строку S вставить строку S0.Стринг еще не учили, исключительно чар. Как это сделать? Объясните на пальцах как вставить строку в строку согласно условию.
>>1371715http://www.cplusplus.com/reference/string/string/insert/Как блядь вообще можно спрашивать такие вопросы? Это же первая строчка в [поисковикнейм] по запросу std string insert
>>1371635По умолчанию std::map использует оператор < типа ключа для сравнения ключей.Ты можешь изменить сам оператор < или, что лучше, предоставить мапе новую функцию сравнения.
>>1371687А разве так вообще можно? Ведь map объявлена так template< class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator<std::pair<const Key, T> >> class map;Т.е. при инстанцировании шаблона map<A, int> mp получится Key == A. А при обращении map[obj.m_a] у тебя будет Key == int, что должно по идее вызвать ошибку при компиляции. Возможно нужна какая-то шаблонная магия, но я хз, т.к. сам вкатывальщик.
>>1371635>>1371638Видишь, я тебя совсем не верно понял сначала.Что-что от тебя хотели?Чтобы в мапе <класс, что-то ещё> ты мог получить доступ к значению не по ключу, а по его свойству?Это логически даже слегка странно(но не полностью): если ты, допустим, хранишь в ключе марку автомобиля(одно из полей которой, допустим, менеджер), а в значении - список моделей, то было бы немного странно пытаться отыскать все списки авто, у которых менеджер - радфемка, независимо от марки.Ну то есть логика в этом есть, но сама концепция ассоциативных массивов слегка не это имеет в виду, как по мне.Но ты можешь действительно просто перегрузить операцию сравнения для этого класса, в котором будешь только по этому полю смотреть различие. Но тогда тоже не очень - для двух объектов с одинаковым только полем все попадет в один элемент - нехорошо.Короче, нахуй бы ты их послал с такими предложениями. Вопросы на сообразительность и вопросы на говнокод - разные вещи.
>>1371784Хотя не полная, надо перегрузить оператор <. Но опять будет ограничение - поиск по одному из полей.struct A{ A() = default; A(const int _a) : m_a(_a) {} int m_a; double m_b; bool operator <(const A& _a) const { return _a.m_a < m_a; } };
>>1371792Можно передать в мапу произвольную функцию сравнения без перегрузки оператора самой структуры.
>>1371715>Стринг еще не училиТут 90% не учили в универах метапрограммирование, лямбды и рвалуе, но все равно их используют, улавливаешь?
>>1371832>>1371845>>1371848Да мне бы с чарами разобраться сначала, зачем мне использовать то, что я не понимаю? Имелось ввиду именно работа с чарами. Выделение памяти проходили. Вот я не пойму, сколько же мне надо адресов дополнительных сохранять, что б потом из кусочков собирать результирующий массив? Или это совсем не так делается? Я додумался пока только до такой идеи: идем по массиву, натыкаемся на искомый символ, получаем его адрес, в исходный массив копируем фрагмент с 0 по элемент с этим символом, прицепляем следом вставляемую строку, и к этому всему прицепляем кусочек, что начинается с этого символа. Но тут опять же не пойму что делать, если будет еще и второе вхождение символа, и третье и т.д. Я вообще в том направлении мыслю, или всё совсем не так делается?
>>1371853Мыслишь правильно. Несколько замечаний. Когда ты находишь нужный символ, создавайте новый массив char с размером длине строки до этого символа + длина вставляемой строки + длина строки после этого символа. Дальнейший поиск продолжаешь уже в этом новом массиве с позиции после вставки. Ну, в общих чертах так
Тебе надо выделять отдельный массив R (result) куда ты будешь копировать. Плюс 1 указатель на текущую позицию в R.>>13718530. Расчитать длину R. Считаешь кол-во символов С в строке S. Помножаешь на длину S0. Складываешь результат умножения и длину строки S - тебе же надо понять, сколько твоя строка (массив символов) будет после этой операции занимать.1. Выделяешь новый строковый массив R, в который ты поместишь результат. Желательно забить его '\0'.2. Заводишь указатель char* p = &R[0]; 4. Заводишь цикл, можешь условный (длину на этапе 0 вычислил же), можешь безусловный.Проверяешь, если S == 'S', то копируешь 'S' и запускаешь второй цикл, который посимвольно копирует S0 в R. Иначе просто копируешь текущий символ в R.Не забывай посимвольно смещать p2 при каждом скопированном символе. 5. Собственно при прохождении верхнего цикла, у тебя получится результирующая строка. Для красоты можешь сместить указатель S на массив R.
>>1371715Создаешь третью строку, большую, чтобы на всё хватило, и копируешь в неё куски остальных строк по порядку.
>>1371656Очень смешно, даунич. Хотя нет, не смешно. У нас тут кресты, а не уроки русской письменности. Внезапно, понятия из бытового языка не соотносятся один к одному с техническими. Уточнять надо, надо вычитать строку (read позицию за ближайший \n кинуть), или речь о редактировании самого файла.
>>1371861Парни, нашел код вот по этой задаче в интернете.>> Дан символ C и строки S и S0. После каждого вхождения символа C в строку S вставить строку S0.char strins (char s, char *s0, char c) { int slen=strlen(s); int s0len=strlen(s0); int i,j; for (i=0; i<slen; i++) { if (s==c) { for (j=slen; j>=i; j--) s[j+s0len]=s[j]; for (j=0; j<s0len; j++) s[i+j]=s0[j]; slen+=s0len; i+=s0len; } } return s;}Может кто дать комментарии по шагам, уж сильно отличается это решение, от того, что пытался сделать я. Не совсем понимаю.
>>1371936>Дан символ C и строки S и S0. После каждого вхождения символа C в строку S вставить строку S0.S.replace(QString(C),QString(C) + S0);не благодари.
>>1371939Да ёптить. Со стрингами не надо мне.Я вот не пойму куда я записываю тут s[j+s0len]=s[j]; Если j=slen, то я в конце строки, правильно? И куда я попадаю после прибавления длины вставляемой строки? Что это за элемент такой [j+s0len]?
>на c++ можно писать безопасно, смартпоинтеры, RAII, статические анализаторы>95% уязвимостей из-за ошибок при работе с памятью
Аноны, помогите с алгоритмом для реализации системы тегов. В приложении нужна возможность добавлять обьекту теги, а потом быстро искать по совпадениям 1 или нескольких тегов. Это мапу использовать, или есть что-то более быстрое?
Подскажите краткий экскурс для человека уже умеющего в программирование. Прочитал Страуструпа года полтора назад, но уже все забыл, с тех пор писал на жабе и шарпе, всякие указатели и адреса еще понимаю, а вот :: через слово и прочий местный синтаксис совершенно непонятен.
>>1372126Когда концепты подвезёшь? Алсо, скажи, чтобы метаклассы не принимали. Не нравится мне всё это направление.
Анончики, в андроид NDK проекте на SDL2 как всякие glBegin и прочие вызывать?это подключил:#include <SDL.h>#include <SDL_opengl.h>это прописал:LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPESLOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llogно все равно на них ругается, что undefined reference to
Кто напишет мне код для этой программы за 200 рублей на Киви? Нужно написать до утра. Создайте программу, заполняющую массив из n элементов случайными целыми числами, находящимися в интервале от -10 до 30. Выведите на экран созданный массив и определите число инверсий. Инверсией называется пара элементов, в которой большее число расположено слева от меньшего
>>1372133Иди нахуй. Зачем ты поступал в технический вуз на пиздомистра, если можешь такую фигню сделать самостоятельно. Лох.
>>1372139Лох, ты? Сам понимаешь, ты - лох. Ты будешь лохом всю жизнь. Ты настолько лох, что готов купить лабу на ДВАЧАХ. На дваче. Купить лабу. Ты лох. Ты будешь учиться в своей шараге и даже первачи будут считать тебя лохом. Потом ты напишешь дипломный проект и станешь дипломированным лохом. Придёшь устраиваться на работу программистом, но тебя заставят носить кофе шефу. Потому что ты лох.ты лох.смирись с этим.
>>1372140>чем на харкаче клянчить?Где блять я клянчу сука? Я 200 рублей предложил за это. Хуле ты проецируешь мразь? >задача в два счета решаетсяНу если такой умный, то напиши за пару минут. На 200 рублей пива себе купишь. Хуле ты такой злой? Ну всякое в жизни бывает. Разные ситуации. Ты например живешь с мамкой и она тебя надзирала лишь бы мой сычина выучился на пограмиста! А у меня другая ситуация в жизни.
>>1372141>Лох, ты? Сам понимаешь, ты - лох. Ты будешь лохом всю жизнь. Ты настолько лох, что готов купить лабу на ДВАЧАХ. На дваче. Купить лабу. Ты лох. Ты будешь учиться в своей шараге и даже первачи будут считать тебя лохом. Потом ты напишешь дипломный проект и станешь дипломированным лохом. Придёшь устраиваться на работу программистом, но тебя заставят носить кофе
>>1372142>Ну всякое в жизни бывает>А у меня другая ситуация в жизниТы это специально делаешь?Нахуй съеби, гнида.
>>1372141А что такого собственно? Сам тут покупал лабы и экз по телеграмму с анончиком. Скоро буду защищать диплом. И вообще жизнь в кайф. А ты наверное злой такой сидишь. За ручку держался хоть? Или ты все время на порно с детьми фапаешь, да код свой пишешь, если ты вообще прогер лол, а не балабол.
>>1372142Тут господа получают 300к в месяц, они за 200р даже в носу не поковыряют. Твоя идея изначально обречена на провал. Лучше одногруппнику пиво поставь за лабу.
>>1372133#include <iostream>#include <math.h>using namespace std;int inv=0; //Compiler version g++ 6.3.0 я на этом у тебя другой может вылезет ошибка int main() { int a = rand() % 100 + 1; // рандом на размер масива ищи у гугла c++ rand()) int *mass= new int[a]; // динамический масив лол for (int i=0;i<a;i++) // заполняем { mass = rand() % 10; } for (int i=0;i<a-1;i++) // ищем инверсии { if (mass > mass[i+1]) inv++; } for (int i=0;i<a;i++) // вивыдим масив { cout << mass << endl; // уберешь <<endl выведет с строчку } cout << "inv " << inv; // выводим инверсии return 0; }
>>1372158Спасибо друг. Подумаешь люди жизнью обиженные сверху высераются. Лол, на двачах со школьниками сидят >300к в наносек ага.Кидай Киви няш.
>>1372162Все равно целую тебя в пупок. От этого понимаешь, что не все такое агрессивное быдло и школьники здесь остались.
>>1372158>math.h, а ни одной функции из него не используешь>Не сбросил генератор случайных чисел>Вместо вектора используешь интовый массив, который явно не удаляешь, да ещё и размер случайно определяешь, а не принимаешь аргументом функции>Не выполняешь условие задачи на x in [-10; 30]>>1372133Учти это, когда будешь переписывать его код.
>>1372164И не забудь сделать переменную для подсчёта инверсий локальной, вынеси все в отдельную функцию и не проебись с [index], которые потерялись.
>>1372164>>1372164>>1372164Спасибо, забыл что rand псевдослучайные числа генерирует.Онлайн компилятор попросил не удалять через delete вот и убрал
>>1372166#include <iostream>using namespace std;int main(){int a = rand() % 10 + 1;int *mass= new int[a]; for (int i=0;i<a;i++){mass = rand() % 40 - 10;}int inv=0;for (int i=0;i<a-1;i++) {if (mass > mass[i+1]) inv++;}for (int i=0;i<a;i++) {cout << mass << endl; }cout << "inv " << inv; delete [] mass;return 0;}
>>1372170Я хотя бы не ракую и не веду себя как агрессивное животное. Очевидно же что ты очкарик ебаный, сидишь дома за компом и всех ненавидишь.Это семён >>1372174>>1372173Еще раз спасибо.
>>1372179>семензначение знаешь? подсказка: нет, это не когда кто-то за тебя запостил один пост.>не ракуюкак ты не ракуешь? ты же чистый рак
Интересно, как скоро он поймет, что те помои, которые ему кинули, вообще не выполняют поставленную задачу?
Поясните за built-in array. Вот с обычными указателями всё понятно: находится в одном месте в памяти, указывает на другое в место в памяти (в котором хранится какое-то значение). А как массив может одновременно в одной ячейке хранить и свой собственный адрес, и значение первого элемента?
сап двач, помогитеесть файл, в котором в бинарном виде записано n-ое кол-во массивов[52]. Нужно считать файл.Делаю следующее:fstream file("file.txt");size = 0;file.seekg (0, ios::end);size = file.tellg();c = size/2704; // 2704 -- столько весит файл с 1 массивомfile.close();step = 0;for(int i = 0;i < c; i++){ ifstream f("file.txt", ios::in | ios::binary); f.seekg(step); for (int i=0; i<sizeof(A); i++) { f >> Array; }f.close();step = step + 52;}Вообщемто, в промежутке я десереализую массив, но решил это здесь не показывать, ибо лишнее.Суть в чем, я правильно использую функциюю file.seekg(step)Она перемещает меня в нужную часть файла и оттуда начинается считывание 52 элементов масисва, но что-то работает не так уж точно(
>>1372326Он хранит не значение первого элемента, а указатель на него, который ВНЕЗАПНО и есть указатель на начало массива.
>>1372341А значение-то где хранится? Там же ведь. &a[0] даёт тот же самый адрес. Как такое может быть, что в одной области памяти хранится одновременно и адрес, и значение?
>>1372343Адрес хранится в a, по этому адресу находится область памяти, в первой ячейки которой находится некоторое значение, которое ты можешь получить с помощью a[0] или разыменованием.> &a[0] даёт тот же самый адресПочему там должен быть другой адрес?
Нужно вызвать функцию в заранее выделенной памяти другого процесса. То есть что-то типо:Выделяю память в блокноте, записываю туда свою функцию, вызываю свою функцию внутри блокнота.Возможно такое вообще ?
>>1372345>>1372348То ли вы не понимаете, то ли я.Вот есть указатель foo, который указывает на переменную bar. Тут всё понятно, foo имеет значение 1776 (что является адресом переменной bar), но сам он находится по адресу 324. Разыменовать foo – значит получить значение ячейки под адресом 1776.А что с массивом a? Он имеет значение 1776 (что является адресом первого элемента массива), но ведь он и сам находится в этой ячейке! Разыменовать a – значит получить значение ячейки под адресом 1776 – там находится значение 1776! Как в одной и той же ячейке может храниться и адрес, и значение?
>>1372354Весь массив не находится в одной ячейке памяти. Название массива это указатель на первый элемент как и указатель для обычной переменной, а [] нужен для упрощения работы с массивом.
>>1372354Вот правильные картинки, массив и переменная указатель.Подробное описание различий можешь почитать тут:https://eli.thegreenplace.net/2009/10/21/are-pointers-and-arrays-equivalent-in-c
>>1372350угутакое делается различными способами инжекта..какой щас наиболее популярный с учетом того что нахуевертили в новых операционках, я не знаю, тк отошел от дел
Поясните за inline функции.Известно, что это лишь рекомендация для компилятора, и он может её проигнорировать и не делать функцию inline.Также известно, что компилятор сам старается оптимизировать код, и делает некоторые функции inline самостоятельно.Вопрос: нахуя тогда объявлять функции inline?
>>1372574https://stackoverflow.com/questions/1759300/when-should-i-write-the-keyword-inline-for-a-function-method>>1372558Первое, но на Фрунзе. Дальше сам смекнешь :3
>>1372573а я вот не понимаю другого: почему можно взять адрес inline функции? получается, что даже если код фии встраивается в некоторые места, но она все равно создается при этоми уже поэтому можно брать ее адрес, вызывать по указателю и прочее..
>>1372742До компиляции никакая функция еще не является встроенной.Вангую, что компилятор не станет инлайнить, если увидит, что используется адрес функции.
>>1372573На inline функции не распространяется правило одного определения, тоесть у тебя могут быть объявлены две функции с одной и той же сигнатурой, при условии что у них есть модификатор inline. Естественно эти функции должно быть одинаковыми иначе хуйня получится.
Дочитываю Прату и понимаю, что мне надоели упражнения, которые он предлагает, они скучные, что делать после прочтения, куда двигаться дальше?Хочется написать что-то полезное, что можно "пощупать", но понимаю, что скилла не хватает.
>>1372742в общем, чутка почиталвстраиваются некоторые вызовы функции, сама то функция создается всегда, поэтому ее и адрес можно взять и вызвать по указателюпричем встраивание может осуществляется как на этапе компиляции, так и на этапе компоновкиа на счет правила odr по видимому происходит так: компоновщик оставляет в машкоде одно определение inline функции, а остальные выкидываета для обычных функций он бы заорал что есть несколько определений функции с одной сигнатуройто тут не разбирался, это типа догадки
почитываю тут старые книжечки саттераинтересно, что есть некоторые возможности языка, которые прописаны в стандарте, но оказались непригодными к использованиюнапример, export шаблонов вместо модели включения: некоторые компиляторы таки их реализуют, но на практике никто их не использует, у саттера же долго и обстоятельно объясняется почемута же ситуация и со спецификацией исключений: в стандарте есть, но на практике оказалось нехорошей вещью
Аноны, такая проблема.Допустим, у меня есть клиент с какими то текстовыми полями в интерфейсе. Пусть их будет 5 штук. Я, значится, меняю какие то 2 поля, и нажимаю сохранить, после чего клиент должен обновить данные этих полей на сервере. Но в следующий раз мне например надо будет менять уже не два поля, а три, и это будут уже другие поля. И так далее.Как обычно эту хуйню реализуют? Ну эту выборочность полей для функции?То есть, я так понимаю, я должен написать функцию "Сохранить", которая принимает рандомное число аргументов, и потом запаковывает это все в пакеты и отправляет на сервер. А как сделать, чтобы она принимала рандомное число аргументов? И как она должна распознавать, что аргумент 1 - это именно поле Имя, а аргумент 2 - именно Номер телефона, чтобы сервер это тоже знал?
>>1373356Нахера ебаться?if (field1.HasChanges()) // Сохранить данные из field1И так далее...Другое дело, если ты не знаешь заранее количество полей
Сап. Вопрос к уже матерым cpp-шникам: насколько широко используются шаблоны в вашей повседневной практике?Только изучаю cpp. Сейчас познакомился с шаблонами - весело и нравится. Создал свой шаблонизированный класс контейнера Vector и поигрался немного. Но мне не до конца понятно где оно может пригодиться Если только не пишешь какой-нибудь STL, как я понял - т.к. писать методы и классы работающие с разными типами не так часто нужно, насколько я понимаю, хотя возможно ошибаюсь. Вижу в вакансиях часто мелькает требование знания шаблонов. Но насколько часто они используются в повседневной разработке? И если используются, то в какой сфере - в разработке какого продукта?
>>1373422>в вакансиях часто мелькает требование знания шаблоновЗдесь наверное все-таки о паттернах идет речь, а не о шаблонах языка с++.
>>1373422общий подход: когда есть необходимость или возможность перенести часть работы со времени рантайма на компайлтаймк примеру, в книжке gof шаблоны реализуются через агрегирование чаще всего, работают в рантайме, что чутка замедляет работу тк добавляет уровень ссылочности, но позволяет конфигурироваться динамически во время работы программыа уже большая часть книги александреску "современное программирование" посвящена по сути как на шаблонах (в компайлтайме) реализовать те же паттерныничего не понял? ну и хуй с тобой, лолну а для прикладных программистов, если у вас на проэкте агрессивно используется stl и вообще стандартная библиотека плюсов, то у тебя не будет выбора как везде срать шаблонами и обобщенным кодом (если ты только не полная обезьяна использующая stl тупо обходя for'ом контейнеры)
>>1373456Ок. Спасибо. Понял, но не все. К примеру, про то, что шаблоны можно реализовать в рантайме - не знал. Пожалуй, почитаю потом детальнее.
Сап. Нужно разобраться с сериализацией, как сериализовать вектор структур и записать/достать в/из файла?
>>1373356Зависит от того как серализуется инфа. Если ты не занимаешся какой-то хуйней где нужно выдрачивать каждый бит, то сериализоваться будет в пакет в котором инфа будет храниться как список кортежей типа "имя поля" + "значение" (плюс дополнительная служебная инфа). Такой подход обеспечивает гибкость, правда пакеты получаются чуть жирнее. На клиенте там нужно смотреть. Самый простой вариант - передавать мапу где ключ имя поля (или значение енума, скажем), а значение - содержимое поля. Плюс у тебя текстовые поля, тоесть не нада ебаться с дерьмом типа std::variant. Другой вариант - передавать объектом, в котором помечено какие поля обновились. Или вообще всегда отсылать значения всех полей.
>>1373349Пиздец вопрос. Если ты в коде создаешь объект на основе этого шаблона и при компиляции нет ошибок - то успешно.
>>1373467как хочеш так сериализуй. предлагаю csv или json, но можешь ебаться в бинарник, если хочешь.
>>1373613защита лабы требует бинарник, что то такое сделал, но ошибка сегментирования после десериализации, пойду в винду смотреть шо как
>>1373695https://en.cppreference.com/w/cpp/string/byte/atoiОберни в try/catch std::out_of_range. Нет гарантии, что твой текст только корректно интерпретируемые цифры.
Как запихнуть указатель на функцию в класс? Хочу что-то типа такого:class test (int numberstring datafunc *func);
>>1373707> Как запихнуть указатель на функцию в класс? Хочу что-то типа такого:https://en.cppreference.com/w/cpp/header/functional
>>1373707Можешь просто запихивать указатели на функции в класс, никто не мешает. Но C++-way это использовать std::function. В них можно лямбды с захватами и другие ништяки использовать.
>>1373580Не, вопрос не про создание объекта, а про template instantiation. То есть как проверить, сгенерил компилятор код под специфический тип по шаблону или не сегенерил?>Пиздец вопрос.А я чо? Я ничо. Это в книжке вопрос задается. А я не знаю как свои ответы проверить в принципе можно.
>>1373723>Не, вопрос не про создание объекта, а про template instantiation.Но у тебя в примере именно про создание экземпляра.А инстанцирование - это генерация кода под конкретные типы. У тебя 3 типа char, int и double используются. Я не уверен насчет инстанцирования double, так как явно использования нет, только ссылка на него, возможно по причине оптимизации компилятор для него не будет выполнять. Но это пусть уточнять более опытные аноны.
>>1373715Работает только для POD (plain old data) - структуры, где все данные запакованы на месте, без указателей (или вложенных структур с такими указателями) на то, под что дополнительно память в куче выделяется.serialize выписывает все элементы вектора на стрим, который ты сам должен открыть перед вызовом и закрыть после, чтоб ничего больше туда не попало.deserialize напротив вычитывает все из аналогично предоставленного input стрима вплоть до упора (EOF) и возвращает вектор. Я, правда, кресты учил давно, и хз, как работают template функции, для которых нужная версия не выводится из типов аргументов. Или lvalue в контексте смотрит (ругается, если не используешь возвращаемое значение), или вручную надо <вот это> указывать между именем функции и скобками
>>1373729>в примере именно про создание экземпляраПеревод кривой. Созданием экземпляра тут называют именно инстанцирование.
>>1373736ну мне нужно адаптировать под свою программу, не полностью понимаю что куда заменять на свои переменные и вместо ostream &out что закидывать при вызове функции и как вызывать vector<T> deserialize, вообщем много вопросов, так как я почти совсем не знаком с функциями и выражениями используемыми здесь, но попробую разобраться. Спасибо за помощь.
>>1373715пардон, я долбоеб. serialize не обязательно циклом делать, вот пофиксил https://pastebin.com/4202FVLC
>>1373736не подскажешь что можно почитать по сериализации чтобы понять смысл и применять в боевых условиях, а то если найду рабочее решение скопирую, но смысл если так и останусь дауном.
>>1373746Сам не читал про это, иначе не стал бы велосипед набрасывать)По-быстрому из гугла подкинуть мог бы, но как-то не комильфо советовать, не ознакомившись
>>1373745ну вот T заменить на свою структуру, что на место out и in при вызове ставить? и как вызвать vector<T> deserialize в мейне?
>>1373751ofstream out("файлназапись", std::ios_base::out);serialize(out, vec);out.close();ifstream in("файлначтение", std::ios_base::in);vec = deserialize(in);in.close();
>>1373758ну мне сказали в итоге в темплейты не лезть и сделать функцию сериализации одного элемента вектора и так по одному перебрать все, а десериализовать с помощью sizeof по одной структуре считывать и пушбекать в вектор, попробую что то сделать, прост логику понять не мог. Спасибо большое за помощь.
>>1373462>шаблоны можно реализовать в рантайме - не зналты путаешь паттерны проектирования (pattern) и шаблоны c++ (template)
И еще вопрос про обертку функции. Есть много разных функции типа int a (int &d), string b (bool c), void k (int &z), Object.func(), которые надо запускать при определенном действии. Можно ли их как-то удобно запихнуть в один класс Events или надо велосипедить?
>>1373783Смахивает на проблему проектирования. Вообще лучше параметры тоже сделать в виде унифицированного типа. А дальше каждый из обработчик его по своему интерпретировал.
Пишу на вашем языке говна лабу, потому что препод - долбоеб и не хочет читать джаву. При этом требований к перфомансу нет. 50 процентов времени уходит на еблю с языком ради нихуя.Так вот, объясните мне, нахуя мне блять 2 файла для одного класса? На-ху-я? Я понимаю зачем это сделано в отцовском си, но здесь эта поебистика зачем?
>>1373830из-за правила odrфункции-члены, как и свободные функции, должны иметь одно определение, поэтому ты их размещаешь в .cpp файле, чтобы они были в одной единице трансляции по итогуза исключением inline функций-членов, которые могут иметь несколько определений (но совпадающих друг с другом), в процессе компоновки линкер выкинет лишние определениясам же класс может иметь несколько определений, поэтому его размещают в .h файле, далее они распространятся по единицам трансляции в процессе компиляции, но линковщик в процессе трансляции опять же выкинет лишниеничего не понял? ну и хуй с тобой!
>>1373830например, у тебя есть один хэдер golovka.h и 2 исходника src1.cpp и src2.cpp . Если бы в golovka.h находились не только прототипы, но и реализации функций, например, void funktsyja() {}, то сначала эта функция скомпилировалась бы вместе с src1.cpp, т.к. #include "golovka.h" - это то же самое, что копировать-вставить содерживаемое golovka.h, потом та же функция скомпилировалась бы вместе с src2.cpp, а потом линкер бы охуел, превращая символьные метки funktsyja в адрес этой самой функции в машинном коде, ибо хуй знает, которую брать, линкер ведь не в курсе, что оба .o файла на этапе компиляции брали исходник этой функции из одного и того же места. А сравнение с Java хуйня, потому что .class не запускается на физической машине.
>>1373830ПыСыа с функциями, реализованными прямо в определении класса, эта история не происходит, т.к. они инлайнятся, то есть их код, с некоторыми поправками, вставляется прямо туда, где он нужен, стало быть, никаких вызовов, меток, адресов, проблем линкования
>>1373701Да я даже текст не могу ввести, потому что не запускается. Если закомментить itoa(res, val, 10);, то запускается.
Хуйню несете. Можно все в одном файле хуярить, если реализация функции прямо внутри класса написана. А отделять объявление от реализации просто хороший тон и повышает читаемость кода.
>>1373881>Можно все в одном файле хуярить, если реализация функции прямо внутри класса написана.это возможно лишь потому что определения функций-членов в таком случае рассматриваются как inline, и компилятор с линковщиком дальше с ними уже разбираются по правилам inline функций
>>1373855я выше уже писалвстраиваются лишь вызовы функций, сама со функция никуда не пропадает, она так же присутствует в объектном кодесо встраиваемыми функциями просто добавляется возни как компилятору, так и линковщику насколько я понимаю, компилятор в каждой единице трансляции будет создавать эту функцию, а линковщик потом будет выкидывать лишние определения (но я не силен в том как устроены современные компиляторы, возможно там и по другому уже делают)
>>1373904а еще, с включенными обычными неагрессивными настройками оптимизации, современные компиляторы вообще то редко делают встраивание inline функций
>>1373881тут одно дело "все хуярить", а другое дело попытаться как и почему это работает в языке, тогда, конечно, поплаваешь в океане сомненийа так да, меньше знаешь - быстрее работаешь
>>1373844не соглашусь, с моими знаниями, вышечкой по специальности и кое-каким опытом работы, я, наверное, все же смог где нибудь работать, если бы не было проблем с головой, к сожалению
>>1373467https://root.cern.ch/notebooks/HowTos/write-objects-to-a-filehttps://root.cern.ch/notebooks/HowTos/read-objects-from-a-file
>>1365137 (OP)Здарова анончики, у меня есть вопросы.Что в перспективе будет быстрее, когда речь пойдёт о размерах в миллионы как пример символов в один байт:Стек или очередь, которая будет заполняться при нахождении алфавитного символа, и когда все символы в файле будут найдеты, через cout будут выведены.Массив, для которого сначала нужно пройтись по всему файлу, дабы узнать его длину, а во втором проходе по совпадению записывать, далее так же отобразить?Дополнительный вопрос.Насколько быстро происходит пересоздание динамического массива с новой длинной? Например, при нахождении нового элемента увеличивать длину на единицу и с этой новой длинной создавать новый массив.
>>1374109Смотри на свои миллионы. Размер стека явно меньше размера кучи.>Насколько быстро происходит пересоздание динамического массива с новой длинной?Присмотрись к Си функции realloc (выделяй тогда при помощи malloc).
>>1374112Благодарю.Ещё вопрос тогда. Есть некая строка в файле, считывание которой я сделал вторым способом с массивом. Есть ли мне смысл городить огород с постепенным наращиванием размера некого блока и копированием туда информации?
>>1374117Я жопой читаю. Ты хочешь использовать STL контейнеры стек или очередь. Возможно стоит посмотреть и vector, у него есть метод reserve, который позволит зарезервировать огромный кусок памяти сразу.
>>1374122Да, и меня волнует вопрос, насколько списки медленнее чем массивы при выводе информации и произвольном доступе, ведь в списках придётся погулять по указателям. Единственное но, хочу именно добавлять информацию по мере обнаружения и без необходимости вычислять заранее количество этих элементов. По всей видимости мне List надо использовать.Суть вопроса была в том, что если мне будет нужно считать некий текст из файла, то удобнее использовать List, однако, когда речь идёт о выводе этой информации в консоль или каких-либо действиях на основе неё. Какая скорость работы в таком случае будет? Не может ли оказаться в итоге, что пусть и двойная работа сначала по вычислению размера, а потом по копированию в одномерный массив, затем выведению в туже консоль будет быстрее, хотя по логике медленнее?
Закидал я конечно вопросами, но есть ещё один.Стоит ли мне заморачиваться и делать обработку первым вариантом или же выигрыш никакой даже для больших величин и проще использовать второй?
>>1374124У list есть накладные расходы по памяти. На 1 твой байт 2 указателя будут (2х4 или 2х8 байт).Если ты будешь выводить по 1 байту в консоль, то операция вывода будет заметно тормознее твоих проходов по любым STL контейнерам.
>>1374127Нахуя ты занимаешься оптимизацией этой хуйни? Компилятор сам за тебя это сделает, не еби себе голову.Алсо, юзай вектор, ему можно заранее выделить сколько-нибудь памяти, потом он по-умному будет ее перераспределять, если не хватит.В общем, всё за тебя уже придумано, лучше сначала напиши, а потом бенчмарки гоняй (с включенными оптимизациями)
>>1374135То есть просто использовать for? Понятно.Касаемо вектора я скорее всего буду его применять когда будет крайняя необходимость, ну или когда на работу устроюсь, хы.
>>1374135Если он хранит тупо символы, std:stringbuf/wstringbuf будет возможно удобнее. Его сразу в поток вывода стошнить можно.
Есть два класса с длинной родословной:a > b > cd > e > f > lНадо, чтобы у них был общий параметр, которые изменялся бы одновременно. Как это правильно реализуется? Указатель на член другого класс не хочется делать.
>>1374157>Надо, чтобы у них был общий параметр, которые изменялся бы одновременно.Ничего не понятно. Что за параметр у класса?
>>1374175бля, плохое слово, член класса. Допустим bool open. И если в одном он стал 1, то и в другим должен стать 1.
>>1374157>>1374182>Указатель на член другого класс не хочется делать.Сделай указатель на сам объект другой иерархии классов, и пускай у тех будут методы GetOpen и SetOpen.
>>1374157>Надо, чтобы у них был общий параметр, которые изменялся бы одновременно.зависит от того на какой уровень связанности ты готов пойти - можно делать начиная от того что тупо делать этот параметр глобальной переменной и до упаковки этого параметра в класс конфигурирования, сделанный синглетоном, которым, в свою очередь будут параметризироваться твои иерархии классов (либо статически через шаблоны, либо динамически через агрегирование)а вообще, конеш, хуева когда изначально иерархии классов проектируются так что должны зависеть от каких-то внешних параметровсверху какие то хуевые советы, если честно
>>1374254ну допустим, есть игра с классом инвентарь и классом карта. И на карте есть дверь, которые должны быть открыты, если в инвентаре есть ключ. При этом по сути и дверь и ключ в инвентаре являются последними листиками в свои деревьях классов. Как исправить ситуацию в таком случае? Создать кучу синглтонов ключдверь и протащить их по классам? Или как надо было поступить изначально, проектируя архитектуру?
>>1374300А сделать у класса инвентарь метод "найти_предмет", который мог бы дернуть класс дверь нельзя?
>>1374300эээдык это ж всегда делается самым наивным способому тебя будет функция или метод "открыть дверь", в ней тупо перебирается инвентарь у персонажа, если найден определенный ключ, то дверь открывается (изменяется ее статус на открыто) иначе дверь остается закрытойобычная дрисня из if, никакого проектирования, лолэто же геймдевглянь код любого рогалика
>>1374323>>1374326я думал делается взаимодействие с инвентарем, у подкласса инвентаря изменится значение, и (вот тут проблема) как-то меняется значение у соответствующего подкласса карты, будто бы они связаны (но не через указатели). Ясен хуй, что можно все процедурно сделать, а когда появятся какие-нибудь еще рычаги, еще 50 ifов везде всунуть.
>>1374346обобщенный на шаблонах что ле? чтобы итераторы отдавал? с минимальными требованиями к типу элемента контейнера, чтобы тупо операция сравнения была и конструктор по умолчанию? с безопасностью исключений? чтобы управление памятью было за контейнер в аллокаторы вынесено? чтобы была поддержка мув-семантики, универсальной инициализации и других фич новых стандартов?
>>1374578По шаблонам со всякими стандартными методами а ля сортировки, сравнения, поиска, итерации. Фифти-фифти, но без изысков
>>1374323>сделать у класса инвентарь метод "найти_предмет"OOP-brain-damaged? Инвентарь не ищет предмет, у него не должно быть такого метода.
>>1374339>Ясен хуй, что можно все процедурно сделать, а когда появятся какие-нибудь еще рычаги, еще 50 ifов везде всунуть. Игры не делал, поэтому не знаю стандартных подходов. Вот мой полуночный бред. Смотри, у тебя предвидятся 50 различных взаимодействий вида "предмет в инвентаре - вещь в мире". Игрок взаимодействует с предметом, и если у него есть какой-то предмет, то случается одно (дверь открылась, ключ исчез), а если нет, случается другое (выводится соответствующее сообщение). Вариант первый, разумный: не мудрить и запилить логику в саму дверь. Плюсы: просто, быстро, код, связанный с дверью, лежит у двери. Минусы: очень статично.Вариант второй, энтерпрайзный: сделать таблицу вида "тип сущности в инвентаре - тип сущности мира - твои коллбеки с логикой работы". Тогда при взаимодействии ты проходишься по этой таблице (если её реализовать как хеш-таблицу - будет оче быстро), и, если есть строка с нужными типами, сделать нужное действие (убрать ключ и открыть дверь). Плюс в том, что этот вариант динамический и можно больше добавить всяких плюшек. Но кода больше и мороки больше.Решай, что нужно.
>>1374710кстати, размер 17 стандарта, а именно 1600 страниц всегда приводит меня в веселое настроениеесли учесть что описание языка оберон-2 - ровно 26 страничек, лол
>>1374713Ну это частая проблема сколько-нибудь долгоживущих инструментов.В крестах все еще осложняется общей навороченностью и богатой историей частичной совместимости с кодом, написанным на С в 88 году под Хуектрум-х42 с 11-битным байтом. Что требует описания всяких обобщений и частных случаев (неиссякаемый источник UB!), которые еще и разные в разных стандартах. Да, и еще разная неявная поебень: типа формально (и в стандарте) это Х, но все делают Y (и в стандарте про это нихуя).Как пример, если правильно помню, в стандарте нигде не было сказано, что функции и области видимости должны работать через стек. Но все здравомыслящие разработчики компиляторов сделали так, и когда вводили лямбды, пришлось обрезать им захваты. И хз, объясняется ли причина этой фичи в новом стандарте, или "просто запомни".
Анон, тред читал жопой, бочку не делал, но есть вопрос: есть ли какой-нибудь толковый дебаггер для типов (тип в компиль-тайме подсветить + мета-программирование и вот это все)? Сейчас отлаживаю аналогами дебаг-вывода, но хотелось бы что нибудь более подходящее.
>>1374724VsCode c соответствующим плагином что-то там подсвечивает. То ли инстанциации, то ли еще что. Не пробовал если честно.
>>1365137 (OP)Стоит ли для индексов в цикле обязательно использовать unsigned int? Или же проще сделать проверку на отрицательное число и ноль?
>>1374726В IDE обычно достаточно паршивая поддержка типов. Было бы круто иметь что-то вроде компилятора, но для типов/шаблонов. Что бы можно было дебажить то как разворачиваются шаблоны, смотреть значения переменных, деманглить гигантские конструкции к более читаемым и тд. Может какие плугины к гцц или шлангу есть?
>>1374860NetBeans 10 + gdb - вполне себе позволяют лазать по шаблонам, показывают значения переменных внутри, вычисляют выражения налету.
Пикрил можно вообще сделать на встроенных типах, не создавая отдельный класс для возвращаемого значения?Функция sum() шаблонная, если што.
>>1374885На сколько большим? Какого размера принимаемые параметры? Вероятно суть задачи заставить использовать не POD типы.
>>1374887>На сколько большим? Какого размера принимаемые параметры? Вероятно суть задачи...Да фиг его знает, что он хочет этот Липпман.Вообще тема - шаблоны + было краткое описание type_traits.>Какого размера принимаемые параметры?Я бы для себя ограничился самым большим из встроенных, long long пускай будет.Я правильно понимаю, что никакой встроенный тип для результата не годится? С остальным уж разберусь самостоятельно.
>>1374899Она там не приводится, пикрил - все, что есть. Причем тут иллюстрация немного другой темы. Сама задача идет позже.
>>1374904Единственное, что на ум приходит:template <typename T1, typename T2, typename RT = uint64_t >RT sum(T1 x, T2 y){ return (RT) x + y;}Ну или поебаться с std::confitional для RT.
>>1374710>че уж там, проще в pdf драфта смотреть html драфта смотреть обычно проще. Исключение — полнотекстовый поиск.>>1374713> описание языка оберон-2 - ровно 26 страничекА брейнфака — и того меньше, лол))Пиши на брейнфаке.
>>1374716>в стандарте нигде не было сказано, что функции и области видимости должны работать через стек. Но все здравомыслящие разработчики компиляторов сделали так, и когда вводили лямбды, пришлось обрезать им захваты.Про что несёт?
Есть папка, в ней находятся две папки, внутри которых заголовочные файлы и срр файлы. Как сделать так, чтобы заголовочные файлы из одной папки были видны в другой?
Решил провести ревизию своих старых laba.cpp и переписать самое интересное на новый лад с использованием best practices и новых возможностей C++. Нашел у себя калькулятор, который при принимает от юзера строку с каким-нибудь арифметическим выражнием типа a + 2 / log(e) и вычисляет. Строка переводится в набор токенов конечным автоматом, затем токены сортируются и вычисляются. Вся обработка ошибок заключалась в выбрасывании эксцепшона по любому поводу, которое потом всплывало до уровня цикла I/O и подробный месседж выводился в консоль вместо результата вычисления. Хочу теперь сделать нормально, используя как можно меньше исключений, но не могу выдумать под это архитектуру.На этапе парсинга можно выявить грубые ошибки ввода, то есть несоответвие формальным правилам, лишние символы и тд. Парсер - отдельный класс, объект которого создается в фунции Parse, кушает строку и возвращает вектор токенов. Как в таком случае сообщить пользователю об ошибке? Но ошибка может произойти дальше. Например, юзер может поделить на нуль. Парсер такое не задетектит, это все вскроется уже на слое обработки токенов. Опять же, как оттуда ошибку протащить до уровня консольного ввода-вывода?Думаю заимплеменить что-то вроде питонового трейсбека, который внутри тапла будет возвращаться из любой свободной функции или метода от уровня ввода до самого дальнего бэка, где происходят вычисления. Нормальная идея? Можете предложить что-то еще? Что почитать на тему?
>>1375078Каких нахуй дисков, ты чо бля полный путь к файлу указываешь?"../" значит "каталог выше", "../../" значит "два каталога выше" и так далее. Если ты беспокоишься за кроссплатформенность, то, во-первых, иди нахуй, а во-вторых, windows уже давно умеет понимать оба варианта слешей.
>>1375073>как оттуда ошибку протащить до уровня консольного ввода-вывода?Используй путь Си с возвратом кода ошибки. Используй путь функциональщины с возвратом ADT мм, монадично в виде своего tagged union или стандартного std::variant.
>>1375081Ебать ты агрессивный, на ПВП позвать тебя что ли.Помог только обратный слеш, с точками он меня на системный диск посылает.
>>1365336а дерево бинарное? ну тип если бинарное то изи, если реализовано указателями то берешь указатель и хуяришь while{tmp=tmp->left/right}, если загрузил в массив то тоже заебись все так же ток у тебя вместо указателя i, 1й элемент-корень дерева, 2k+1 - корень левого поддерева, 2(k+1)- правого и так переходишь
>>1379145>Вопросы по синтаксису идут на хуй>Лабы идут на хуй>"Как мне сделать Х на чистых крестах без библиотек" идут на хуй>Все идут на хуй>Хейтер сосет члены на пару со своей мамашей