Вы видите копию треда, сохраненную 18 января 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Вместо шапки:
• https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
• https://en.cppreference.com/w/
• https://www.cplusplus.com/reference/
Прошлый тред:
• >>1517305 (OP)
Сложно в нвидию вкатиться?
Смотря на какую вакансию.
https://hh.ru/vacancy/34625024 - Сюда сложно
https://hh.ru/vacancy/34340415 - Сюда легко
Мидлов не нанимали, конкретно крестовых.
Глобальный ответ на твой вопрос - вкатиться проще, чем, например, в тот же яндекс. Но обязательное требование английского на вообще все вакансии.
>Но обязательное требование английского на вообще все вакансии.
Отвратительно.
И как этот английский получить? Вот я лопух, что-то по английски могу сказать но понятия не имею какому уровню это соответствует и как этот уровень подтверждать.
> И как этот английский получить?
Вокруг миллоны школ\материала и прочей херни. Нужно только желание.
Мы на собесе просто несколько минут общаемся на английском, если требование разговорного есть. Никаких бумажек и сертификатов никогда никто не спрашивал.
>Никаких бумажек и сертификатов никогда никто не спрашивал.
А, тогда нормально всё.
Хотя такое, разговорный у меня в десять раз хуже письменного, потому что я только пишу или читаю. Произношение очень слабо соотносится с написанием, и знание написаний и значений всех слов очень посредственно помогает их правильно произносить/воспринимать на слух.
Кинь несколько примерных вопросов с собеседования.
ничегосе, в Москве есть офис нвидеа, я думал, что с началом кризиса иностранных контор стало меньше
мимо из Киева
Есть ли где-нибудь шаблоны этих файлов для проектов?
Я имею ввиду мне лень каждый раз записывать в него всякие флаги компилятора, для дебаг, для релиз версии и тп
Вам еще и мерч нахаляву выдают? Во дела.
То есть если я 25 годиков детина без опыта работы и вышки нормально пройду собес, то меня возьмут? Что прям реально никакой бюрократии, все открыто и прозрачно?
Да. Но надо понимать, что на энтри-левельные позиции гигатонны желающих, и твое резюме будет максимально блекло смотрется на фоне всяких выпускников МГУ и прочих челиков, и тебя просто не позовут, т.к. нет времени собесить всех.
Т.е. если ты без вышки но с релевантным опытом - это одно, но если вообще пустое резюме - то смысл тебя звать на собес?
switch (strhash(s)) {
case strhash("suka"): ...; break;
case strhash("blyad"): ...; break;
case strhash("nahui"): ...; break;
}
Свич будет считаться в рантайме, а кейсы заготовятся еще при компиляции, и любую коллизию прекрасно поймают правила switch-case. Охуенно, да?
Срочно звони трупу. То-то он охуеет!
Само собой. С хорошей хеш-функцией скорее всего не будет, но если не повезло, то мне об этом расскажут, и я что-нибудь подменю, чтоб конкретно на мой набор легла удачная фаза луны. Было бы страшно, если бы компилятор при генерации таблицы прыжков несколько раз присваивал одному индексу разные метки в порядке повторения кейс-констант и не ругался, тихо оставляя таким образом последний из вариантов. UB нет, я об этом.
Слушай, ну это дрочилово с C++ меня не интересует. Ты лучше скажи, есть ли у вас проекты на Java/Scala? Или вы все оверпрайснутыми видимокартами торгуете за 2 штуки баксов, у которых цепи питания гудят, ммм?!
А, все понятно. Вы там на гоу с питоном пишете какую-то срань. Ладно, проехали, старина.
> хеш-функцию для строк constexpr
Теперь найди нормальную криптографическую функцию, которую можно написать c constexpr.
На практике выдали задание,на стартовой форме приложения должно быть динамическое(подтягивать из БД) штатное расписание предприятия.Как это сделать?Думаю использовать tree view,но никак не могу найти код для его наполнения из БД.
Проект пилю в Rad studio xe2
Тебе нужен не программист с++, а программист использующий radstudio, чтобы ответить на этот вопрос.
Я только делфи ковырял в radstudio. Заполняется tree view по идее тривиальным образом так же как и остальные "компоненты" - тебе нужно просто найти код, который откроет и считает значения из твоей бд.
И из какой БД?
Это зависит от формата твоей бд, которое никак из твоего поста не следует - соответственно никто тебе не сможет ответить. Например, если там csv-файл, то это очень просто сделать.
Как суммировать все числа строки и вывести сумму на экран? Именно string, тупо менять тип данных на int нельзя
> stringstream
Вот откуда ты это узнал? Почему этого нет в книге страуструпа, нет на сайтах и в видеоуроках?!
Спасибо
udvaivayu
На стэковерфлоу когда-то подглядел, искал реализацию сплита строки по нужному символу(создаёшь со строки поток и делаешь getline).
Мало ли, почему об этом не пишут, я сам в книгах и курсах не встречал, может, тяжёлая вещь слишком
>может, тяжёлая вещь слишком
Уж точно не тяжелее регулярки, которая сразу на ум приходит, если на коленке хуйню нужно сделать.
У Страуструпа есть в его нубокнижке, у Липпмана тоже есть, он вообще люто топит за STL.
Это сугубо библиотечное средство, соответственно искать надо в книжках конкретно по STL, а не в книжках по языку в целом или по совершенно другим узкоспециальным вопросам.
По аналогии с sscanf логично копать в сторону i/o library (cppreference)
Отклеилось
Спасибо, я на главе "Ошибки", книги вроде надо с начала читать
Если нравятся кресты - то стоит. Первое время можно пердолить чистый С++ (как делают на курсере в Яндексовском курсе), а потом уже опустишься ниже на УКАЗАТЕЛИ и прочее си
Я просто сейчас изучаю Java Core, потому что там КАДИЛО КРУТИТСЯ, ЛАВЭХА МУТИТСЯ и прочий энтерпрайз. Всё понимаю, но чувствую, что это не то, что я хочу. Поэтому хочу попробовать C++, но вот подумал, что батю С++(т.е. чистый СИ) надо знать хорошо перед изучением его.
не надо прям сразу, но в будущем придется
Дизайн и эволюцию надо прочитать
> чистый СИ) надо знать хорошо перед изучением его
В любой более-менее нехалтурной книге о плюсах все необходимое из си всегда излагается.
Если ты начнешь с чистого си, да еще так, чтобы >знать хорошо
рискуешь набраться вредных привычек или вообще до крестов никогда не добраться.
С другой стороны, если ты уже осилишь какой-то курс по плюсам, то изучение сишечки вообще не составит особого труда + будешь понимать зачем тебе вообще эта сишка нужна.
Сап, двач. Вопрос к самураям Qt. Есть один QStackedWidget, в который засунут QSpinBox (вообще то реализация QAbstractSpinBox, но думаю, это не важно в данном случае). При вызове QStackedWidget::setCurrentIndex() происходит вызов QSpinBox::on_spinBox_editingFinished(), который обрабатывает сигнал QSpinBox::editingFinished(). Как отвязать on_spinBox_editingFinished() от setCurrentIndex()? Можно, конечно, обложить blockSignals(), но это кажется не очень элегантным решением (при каждом вызове setCurrentIndex() создавать QSignalBlocker это такое). Я попробовал что-то типа disconnect(ui->spinBox, SIGNAL(editingFinished()), ui->stackedWidget, SLOT(setCurrentIndex(int))), но нихуя не произошло.
Ну и вообще, как сделать так, чтобы при вызове определенных методов не вызывались определенные обработчики?
Сенькс
>QSpinBox::on_spinBox_editingFinished()
Ошибочка, это слот не QSpinBox, а MainWindow. Попробую его и отсоединить от StackedWidget, мб получится.
Возьмем сферического идеального джуна в вакууме. Как он выглядит в 2019 году? Какими навыками должен обладать?
закончить бакалавриат по специальности связанной с программированием, быть мотивированным на то что закончит и магистратуру (совмещая с первой работой)
знать базовые структуры и алгоритмы; чтобы было хотя бы задач 300 сделано на любой из компитив платформ
эээ, все?
>чтобы было хотя бы задач 300 сделано на любой из компитив платформ
300 хэллоувордов и lab4 тебе ничего не дадут, кроме ложной уверенности в том, что ты что-то знаешь и умеешь.
>что ты что-то знаешь и умеешь
если под знать и уметь ты подразумеваешь еблю с конкретным стеком, то да 300 решений на литкоде этого не дадут.
Под знать и уметь подразумеваю разрабатывать софт. Задачки не про разработку софта, а про спортивный интерес. В этом нет ничего плохого, но не надо обманывать себя, типа ты становишься лучше как профессионал от того, что решаешь задачки. Для того, чтобы научиться плавать в реке Янцзы, нужно плавать в реке Янцзы.
>чтобы научиться плавать в реке Янцзы, нужно плавать в реке Янцзы
но научиться не тонуть можно и в бассейне
И где доказательства, что задачки помогают не тонуть при разработке? А? А?
Имею ввиду вопросы и просьбы
PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(400, 256)). Функция возвращает 1, то есть ERROR_INVALID_FUNCTION
нам нужен тред системного программирования отдельно походу. Это вообще не С++, но спросить да, более негде
Я новичок в с++, но вообще да, куда еще нести свое говно насчет винапи.
видимо придется отказаться от затеи не двигать курсор визуально, send/post message походу ни у кого вменяемо не работает
бамп годному воросу
Говно мамонта, актуальность ~30%
Некоторые вопросы откровенно ёбнутые, некоторые чисто байтоёбские - я бы не пошёл в контору, где их спрашивают, некоторые просто устарели. Но кодер, который прошёл этот собес в 2007 сейчас либо ГОЛОВА, либо некрокодер
Байтоебство я бы провалил, первые три вопроса осилил бы, потому-что интересовался, а -2 в двоичном хуй знает если бы дали 2 минуты покодить то сказал бы . По плюсам вопросы вполне адекватные и даже лёгкие. Математика для гейдева думаю вполне адекватное требование, а за ассемблер на джуна я хуй знает. В принципе статья так себе, уровня ищем гения за 10к. Надеюсь у них реально охуенные проекты, раз такие требования к новичкам, иначе я даже не знаю стоит ли оно того
Сейчас долистал до комментов, автора статьи даже там обосрали с ног до головы оно и правильно, нанимать С++ джуна и не спрашивать практически нихуя по С++, зато ебать мозги байтоебством
>N*log(N) в дереве, и почему оно так.
Лолват
>Почему float умножение быстрее чем целочисленное.
Лолват. <После просмотра таблиц Агнера> Блин, и правда. Это потому что там экспоненты складываются, и собственно умножать нужно намного меньше бит?
А так по всему кроме математики, думаю, процентов 90 бы ответил (знаю почти всё кроме устройства виртуальных функций и исключений. Я как-то года три назад запарывался по этому поводу, но у каждого тулчейна и платформы они свои, и поэтому забил). Математику ответил бы 50%.
Внимательнее читай, это специально ошибочные вопросы, чтобы с толку сбить. Аля виртуальных конструкторов, только из другой области
https://gcc.godbolt.org/z/qRJJk2
Я не уверен, что вообще корректно это проверил, было бы хорошо, если кто-нибудь адекватный отреагировал.
> Надеюсь у них реально охуенные проекты
Если мне не изменяет память, то автор статьи из команды разработчиков mortal kombat. К моменту написания статьи они многие годы уже находились в глубокой жопе и гнали лютый треш.
>>27902
Задроты ищут себе подобных, чтобы общаться на одном языке и, судя по всему, им это удается. А чужое горе - ну кого оно когда ебало?
>то автор статьи из команды разработчиков mortal kombat. К моменту написания статьи они многие годы уже находились в глубокой жопе и гнали лютый треш.
Бля в голос
>арряяя джуны совсем обмельчали нихуя кадров нету
>ну и похуй что требуем как от мидлов
>ну и похуй что зарплаты низкие
>ну и похуй что из-за личной неприязни не берем
Прошёл всё по плюсам и половину по математике, остальное выглядит как бесполезное доёбство. Неудивительно, что комментаторы его обоссали
Справедливости ради, за треш несут ответственность дизайнеры и те, кто им платил.
>Блин, и правда
А, не, я жопой прочитал таблицу.
MUL: Latency 3 Throughput 2
FMUL (котоаря на x87): Latency 4 throughput 1
Ну это уже ресентимент какой-то, ребят: если я не могу, то они не только пидоры и говноделы, но ещё и найти никого не могут.
Чувак, если что, не МК делал, а работал (может быть, и работает, но лень смотреть) в Naughty Dog / ICE Team - можете погуглить, кто это такие, но на всякий случай выражу мнение, что в контексте вторых такие заёбы с требованиями вполне себе оправданные, хотя, конечно, и иррациональные именно в контексте собеседования.
Джун в Ноти Дог это как сеньор в среднем по рынку, просто далеко не факт, что тот чувак собеседовал в контору настолько высокого уровня, а не в дженерик галеру. В первом случае такие завышенные требования более чем оправданы, во втором -- нет.
Там не было "дженерик галер" на момент написания статьи.
http://blog.gamedeff.com/?page_id=45
По комментариям ты можешь понять, что статью писал Борис Баткин, который в две тысячи седьмом работал в ICE Team:
https://www.mobygames.com/developer/sheet/view/developerId,53108/
http://emirr.ru/emirr_people/72-lyudi-rossijskoj-igrovoj-industrii-boris-batkin.html
Да, к МК он отношения не имеет, но в Midway все же работал.
С этим не спорю, но это было уже не на момент написания статьи.
Вообще же, если честно, я защищаю такие требования просто из-за того, что сам предпочту дрочить железо и предметную область, а не всякие модные нововведения плюсовых стандартов, на которые принято класть в геймдеве (по очевидным причинам, кстати).
Потому что главный разраб когда-то в 96м году наткнулся на баг кодогенерации в Borland C++ Compiler при использовании неизвестно откуда скачанного STL и решил, что оно зло?
STL не зло, но его банально не везде можно использовать - если ты не догадываешься, почему, то бог тебе судья, конечно.
Также стоит учитывать, что не на всех целевых платформах всегда есть самые свежайшие компиляторы - сейчас ситуация исправляется, но об окончательной победе говорить рано.
>>27699
а что не так?
в альтернативной вселенной где я бы не забил на кодинг и на работу вообще и сейчас сидел бы тимлидом в какой-нибудь конторе, то если бы пришел джун с образованием по специальности (и при этом не проебывал все пары подряд), и который до этого задрочил задачек 250-300 на каком-нибудь литкоде или хаскерранке, то почему бы и не взять?
Пиздуй на хохляцкие имиджборды, какло.
> Кинь несколько примерных вопросов с собеседования.
Есть два компилятора. За какой сам сядешь, а за какой Страуструпа посадишь?
300 задачек -- это странный критерий, он показывает умение решать простые отвлеченные задачи, а не умение решать сложные (читай -- комплексные) прикладные задачи. Это та же самая ситуация, что и с тестами айкью. Тесты айкью могут отсеивать совсем полных дегенератов от людей, обладающих минимальным интеллектом, но это невероятно хуевый способ искать даже не то, что гениальных, а хотя бы талантливых людей. Я бы не стал делать такой критерий необходимым, скорее просто как плюсик в карму.
Задачи разные бывают. На leetcode хорошие задачи и 300 задач оттуда будет куда полезнее и для интервью или для чего либо еще.
Желательно, чтобы с си-массивами из float/double работала, без всяких std::array. Комплексные числа не нужны - нужны только если сразу с кватернионами, но в последнюю очередь.
> закончить бакалавриат по специальности связанной с программированием, быть мотивированным на то что закончит и магистратуру (совмещая с первой работой)
Ненужное дрочево, пережиток совка
Только в России для либерах это пережиток совка.
Почему-то не могу найти в каком месте стандартная библиотека позволяет вычислить хотя бы обратную матрицу.
Благодарю, прям очень спасибо.
Потестил, отличная штука на первый взгляд и запустилась сразу же, никаких lib-файлов, просто хедер добавил. По идее ихний Map не должен делать никаких реальных действий при использовании си-массивов определённой размерности - по крайне мере указатели в его структурах те же самые. Ещё и быстродействием хвалятся на своём сайте - круто, если оно так.
>не слишком крупную - чтобы не приходилось дополнительно изучать особенности именно этой либы, ебанутые местные типы/структуры или ещё что-то
Просмотри эту страницу, на всякий случай.
http://eigen.tuxfamily.org/dox/TopicPitfalls.html
Например
static class abc
{
abc(); ?
~abc(); ?
}
Не нужны. Можешь даже сделать их delete.
Откуда вы лезете только.
> a storage class can only be specified for objects and functions
Нет, ну ты можешь сделать класс только со статическими членами, но его всё ещё можно инстанцировать.
Так удали конструктор. А вообще в С++ не нужны статик классы, потому что есть пространства имен.
мимо
Тогда странно что ты применил static к классу. Такое в сишке к структуре может еще прокатить, но эффекта никакого не даст
Тогда это будет класс со статическими членами и удалённым конструктором, только и всего - речь же о самом понятии статического класса, которого нет в языке.
Это будет считаться статическим классом, неявно. Аналогично с интерфейсами и еще много чем.
У меня от тебя социальный конструкт. Интерфейсов тоже нет в языке, но ими всё равно пользуются.
>>28488
> ну ты можешь сделать класс только со статическими членами, но его всё ещё можно инстанцировать.
Я написал про delete в следующем посте.
>>28496
У пространств имён нет модификаторов доступа. Если не нужно ничего скрывать, то я соглашусь.
Я никогда не применял раньше, но редактор студии не ругался, я и подумал, что можно
Так ты варнинги смотри, а не ошибки.
И у тебя будет сообщение, что ключевое слово static опущено, т.к. не объявлена переменная.
> У пространств имён нет модификаторов доступа. Если не нужно ничего скрывать, то я соглашусь.
Тут, блядь, и спалились умники. "Статические классы" у них бывают, а неймспейсы ничего не скрывают (особенно безымянные, которые и используют, чтобы сохранить объявление в рамках единицы трансляции). Пиздец.
тебе никто не мешает заэкспозить в неймспейсе только "публичную" херню, а в .cpp сделать кучу хелперов и прочего, чего тебе нужно, включая "статические" переменные.
Ты так и не сказал, что сделать хочешь.
Если тебе нужна та "статичность", что к функциям применяется, то только анонимные неймспейсы. Выбора нет.
> Интерфейсов тоже нет в языке, но ими всё равно пользуются.
Не путай тёплое с мягким - статических классов в плюсах нет хотя бы из-за того, что они тут вообще не нужны, в отличие от всяких джав и сишарпов, где для объявления любой сущности нужен класс.
> не маняврируй.
А по существу что-то сказать? Так можно все аргументы отметать, потому что "это другое".
Перенося что-то в анонимный, ты отрываешь ребёнка от груди, разрываешь связи, сдаёшь в детский дом. В то время как нужен родительский контроль.
> тебе никто не мешает заэкспозить в неймспейсе только "публичную" херню, а в .cpp сделать кучу хелперов и прочего, чего тебе нужно, включая "статические" переменные.
@
> Ну тогда и модификаторы доступа в классах (любых) не нужны, если настолько изъёбываться.
Хотя нет, здесь я был не прав. Если класс не статический, то нужны отдельные экземпляры закрытых переменных, и тогда помогут ьолько модифткаторы.
>Ну тогда и модификаторы доступа в классах (любых) не нужны, если настолько изъёбываться.
тут уже наследование ломается
никто не знает причем здесь раст.
Я вообще нихуя не понимаю что туда вписать нужно и стоит, а о чём лучше не говорить
Подавать себя не могу, а вот поговорить на счёт кода - пожалуйста
пиши то, с чем работал и что сделал.
А-ля
2002-2004, ЗАЛУПА энтерпрайз
Стэк: C++, C#, C++\CLI, C, MySQL
Написал новую базу данных, нахуй выкинул старую.
Ускорил поиск на 0.02%
В первом случае у тебя занято подряд N*M памяти, а во втором - N расположенных отдельно участков размера M.
Может оказаться, что и во втором случае все лежит подряд, но я бы на это не надеялся.
На хх открытые резюме посмотри.
>>28807
https://www.qt.io/blog/2017/04/18/multithreaded-programming-future-promise
https://habr.com/ru/post/311090/
Ну хули вы ничего загуглить не можете.
Модер додик, сосать.
> > Ускорил поиск на 0.02%
> Вся суть байтойобушков
Это всё для того чтобы твой пронхаб грузился быстрее
Ну так визу в европку и не из украшки можно получить за несколько дней.
Чем это может быть лучше std::async?
Прочитай С++ за 21 день и иди сеньором в гугл
Завтра идёшь в годот тред геймдевача. Похуй если ничего не поймешь.
Тащемта в масштабах того же pornhub это может привести к нихуёвой экономии электричества
Возьми готовое, или подожди c++23, там будет искаропки
в геймдеве нужно шлепать на готовых движках\фреймворках. Графические программисты нынче очень большая редкость, а как вкатиться в джуна - видел вакансии только от Unigine в Томске (с Томской зарплатой в 3 роллтона)
Успешное выполнение этого задания дает вам право на еще одну проверку любого дз.
Братан, нафига? Тебе жалко +24 байта с вектора?
Бумп
>в геймдеве нужно шлепать на готовых движках\фреймворках
Это не означает, что ты избежишь контакта с графическим стеком, рендер инженер должен знать всё то же что и при написании с нуля.
А для тупых, но более сложные вещи чем хелоуворлд? Мне надо интерфейс к бд сделать.
Берешь библиотеку и делаешь. Конкретно вижуал студия тут причем?
https://github.com/fffaraz/awesome-cpp#database
Я вообщем сделал все методы и поля статическими, кроме конструктора и деструктора, их я удалил.
Насколько сложно перенести проект в 2.5к строк на С++/Qt виджеты на винформы, без знания последних. Сильно там различаются подходы, сам осилю срок - неделя или лучше найти кого-то?
По большей части отрисовка с помощью QGraphicsItem и QGraphicsScene, вроде бы в шарпе тоже на наследовании от абстрактного контрола суть, но смущает что еще используется достаточно немало слотов-сигналов, хуй знает как их заменять.
у майерса было про Rule of 5
Это уж как тебе захочется. Если похуй на взлом, можешь хоть связку умножить на два + поделить на два. Если ты хочешь проверку серийника запилить - плоти умным людям либо выдумывай свой способ шифрования.
Достать хуйню и дрочить её, очевидно же.
> конструктор копирования для класса, у которого есть юник_птр на другой класс
Он разве будет существовать?
Ну так-то если юзать std::variant, то там тоже оверхед будет, так что по памяти мб я и не выиграю, но прек в SSO/small vector из буста/такой вот хуйни в том, что ты не делаешь лишних аллокаций имплаинг не засоряешь хип. К тому же это полезно, если ты не хочешь думать над тем, как парсить строку (если есть такая оптимизация, то менее болезненно будет просто читать диджиты и делать a += d; a *= 10;). А вот сделать перегрузку для арифметических операций от инта нельзя, так как в таске требуется неявный конструктор от инта, и это будет компайл тайм эрор.
>конструктор копирования для класса, у которого есть юник_птр на другой класс?
Тут надо делать deep copy, ни у какого Майерса такое не расписано, самому делать надо.
>Там вроде все по-другому.
Не выебывайся, качай Qt Creator и делай свой интерфейс к бд. Qt Creator попроще и можно сразу все на формочки мышкой хуярить. Делая интерфейс в вижуалке на C++ ты обрекаешь себя на боль и страдания.
Двачую, потом при сборке просто добавить папку с драйверами, которые сами генерятся, и всё. Никакой ебли с либами, переносимостью и подобного.
Я в целом прошу какую-то книгу, в которой отдельно по частям будет хорошо расписано, чтобы потом было понятно какие правила накладываются при реализации сложных вещей.
Прочитал Тур по С++ Страуструпа, там вроде все и обо всем написано, но как-то довольно общо. Хочется чего-то пообстоятельнее.
Ну страдай тогда, что еще посоветовать. Мог бы и лабу сделать и кути начинать осваивать, потом пригодятся, а так будешь говно мамонта палкой ковырять, о котором после сдачи лабы забыть можно будет.
>Хочется чего-то пообстоятельнее.
Начни с практики. Накодь свою дженерик коллекцию. Двусвязный список, например, или хэш-таблицу. Со всей лабудой, рул оф файв, итераторами и т.д. Большинство вопросов отпадут в процессе работы.
Хеш-функция. Заранее узнать хеш своего значения, захардкодить его, а затем брать хеш вводимого значения и сравнивать с захардкоденным.
Проиграл почему-то. Clion качай, нюфань.
Кури алгоритмы, но это не поможет все равно. Без специализированных тулз, типа Vmprotect, скрыть ничего не выйдет. Если хочешь что-то спрятать, прячь это на своем сервере, а не в приложении.
Вопрос дибила, в случае если тебе нужно копирование, логичнее сделать шаред, а не юник. Вообще если делать действительно хорошо можешь посмотреть сурс clickhouse. Там указатель на столбцы хорошо сделаны, совмещает идеи интрузив и юник для хорошего cow
Спасибо
А в чем страдания, там вроде через ado.net просто должно быть подключить бд, не? Я книжку скачал Пахомова по vs C++.
это скорее всего адовый мусор, который учит ВИЖУАЛ СТУДИИ, а не С++. При всей моей любви в студии - это только IDE, а не ебучий диалект, который раньше педалила микрософт
Сука ты реально тупой, смотри человек хочет написать variant<int, vector>, что по памяти будет 24 + 1 + выравнивание. Ты как полный дегенерат пишешь
> Тебе жалко +24 байта с вектора?
Пиздец как можно быть таким аутистом
Угу, так и вижу, как вася привинчивает кастомную систему анимации для залупанейм, не зная как кватернионы крутить. А саня пытается профилить рендер, не зная что такое дроуколл. Антошке поручили побороть ореолы оклужена при имеющейся геометрии, а он смотрит в шейдер и видит бибу. Бригада джамшутов, блять. Все юзают готовые движки, они экономят гору работы, но ни один не изолирует от кишков, всегда всё задрачивается под специфику игры, хоть на УЁ4, хоть на ебучем юнити. Это и есть работа геймдев макаки, поэтому она обязана знать базовые вещи, а рендер-инженегр и подавно. И плюс к тому специфику используемого двигла.
да вот, выбирай любое.
правда хуй знает почему эти неосиляторы проблему ламберта в фак ю записали, там всё просто, если матан не прогуливать
В ди пи ти одни mathlet-ы просто
Ну я имел в виду скорее не просто задания, а обучающий ресурс, который даёт информацию, как что-то делается, и задание на отработку (так я в душе не ебу как можно сделать тот же Download manager)
Наверни курсы от pvs-studio
roll
Да и так всё выровнено.
А нормально что теперь моя программа компилируется по 90 секунд вместо 3? Это невыносимо. Мне нужно число с 2 на 2.5 переставить, а оно пересобирается минуту с лишним.
SetConsoleTextAttribute(hConsoleHandle, FOREGROUND_GREEN);
Сюда можно добавить параметр яркости?
нет
Это ты еще до qml не дошел, там ваще жабаскрипт.
Например? Какие макросы ты исполсуешь? SIGNAL, SLOT устарели. https://wiki.qt.io/New_Signal_Slot_Syntax
Например свойства
Это и есть не кресты, иначе moc был бы не нужен.
Вангую, что ImGui
Что, даже если это консольное приложение? Или ты кут в глаза не видел?
Да, знаю всю графическую подсистему винды наизусть. Первое, что должен уметь делать каждый С++ программист - это писать врапперы под апи своей оси, только макака будет качать 100гб кюти-говна и тащить за собой 10 метров дллок ради формочки из коробки.
>Первое, что должен уметь делать каждый С++ программист - это писать врапперы под апи своей оси
NIH syndrome во все поля.
>Да, знаю всю графическую подсистему винды наизусть. Первое, что должен уметь делать каждый С++ программист - это писать врапперы под апи своей оси
У тебя ПТСР
>>31085
А вы я смотрю кроме хеллоуворлдов и формочек ничего не клепали. Во взрослой разработке всегда придется дрочить ось-апи, ибо в паблике нихуя нет, кроме фрейморка для формошлепов.
> inb4 ко-ко-ко а как же БУСТЪ!
А вот его тоже не хватает, представьте себе. Особенно под винду.
>>31069
Ну можешь тащить сишечку, а нормальные люди пишут врапперы.
Вендролокнутая на винду взрослая разработка - мечта просто. Как НИИ называется?
ну мы в NVIDIA это делаем за 400кк\нс. И да, это правда мечта.
Мань, вендролукнутное это про педиков из эпл, у майкрософт уже давно все чики-пуки.
Еще раз говорю, всех этих бустов хватает на написание калькулятора, в лучшем случае. Если вы не заметили, то майкрософт выпускает новую ось каждые полгода.
>вообще изучи билд-систему, процесс компиляции и линковки
Я бы с радостью, но есть сколько угодно инфы про языки программирования и очень мало про конкретные компиляторы и линковщики, хотя второе мне кажется более сложным.
То есть я даже понимаю что ты имеешь ввиду и как я бы сделал это в своём компиляторе, но когда я смотрю на эту фигню у меня просто руки опускаются, потому что я не телепат чтобы догадаться что нужно нажать и прописать, чтобы чужая фигня сделала то что мне нужно. И никаких внятных описаний или статей дающих цельное представление тоже не могу найти.
Сириусли? Звучит как неумение в гугл, или в английский. Ищи доки по своему компилятору, билд системе и т.п., а вообще обзоры с высоты птичьего полёта есть в банальной википедии.
https://docs.microsoft.com/en-US/visualstudio/msbuild/msbuild - MSDN раздел по вижуал студиевской MS Build, там и туториал и разложение по полкам
https://cmake.org/cmake/help/v3.16/guide/tutorial/index.html туториал по текущей версии CMake
или что там у тебя, надо искать самому тогда
По precompiled headers есть прекрасная обзорная статья в википедии и ссылки в ней. По линкерам аналогично.
https://en.wikipedia.org/wiki/Name_mangling вот это ещё можешь почитать для общего развития, чтобы когда будешь разбираться в остальном, не возникало вопроса "а хули имена такие корявые".
В целом кресты компилируются реально долго, они не затачивались под скорость компиляции, и прекомпилированные хэдеры - не панацея, под них надо подгонять структуру исходников изначально. Но знать всё это надо, ты неизбежно будешь контактировать с этим при работе с нативным кодом на любом языке, а то даже и при использовании какого-нибудь из source-based линуксов.
>Сириусли?
Угу. Почти три года ковыряю кресты "по выходным" трогая всякое, субъективно знаю почти все особенности до 17 стандарта, за исключением некоторых штук с шаблонами. А с мейками и подключением чужих либ беда - каждый как первый пытаюсь разобрать как оно работает.
Я нашёл как сделать эти precompiled headers и уже их добавил (3 секунды вернулись даже несмотря на то, что я не всё смог запихнуть в эти precompiled, за что большое спасибо), но никакого понимания cmake мне это не добавило. Угу, теперь примерно представляю как такое сделать в простой ситуации, но если мне потребуется сделать что-то ещё - я всё ещё абсолютно не понимаю как сделать это на cmake без форумов и туториалов.
Реально ли из Шарпа на плюсы пересесть? Насколько сложно?
Интересует именно синтаксис, копипастом программу перенести же не получится? И знание сишарпа сильно будет мешать при кодинге на плюсах.
Реально, сложно. Синтаксис будет очень непривычным.
Нужно понимать, что плюсы более низкоуровневые. Стандартная библиотека скуднее. Вместо сборщика мусора умные указатели или ручное управление памятью. Байтоёбство во все поля. Много небезопасных операций, вызывающих undefined behavior. И очень много самых разных синтаксических конструкций. В общем, нюансов много, и шарп поможет только тем, что ряд подходов общий для всех основных языков, и ты их уже знаешь.
Книжку Вильямса
string s, check;
s = "hello_world";
cin >> check;
if (check==s) {cout << "yes"};
else {cout << "no"};
И всё идёт как надо, компилятор ждёт моего ввода и только затем сравнивает введённую фразу с заданной. Но из-за _ вместо пробелов это убого и неудобно. И я пытаюсь использовать getline:
string s, check;
s = "Hello, World!";
getline(cin, check);
if (check==s) {cout << "yes"};
else {cout << "no"};
Но в этом случае компилятор не ждёт, пока я введу фразу, а сразу выполняет else и выводит no. Как сделать, чтобы этого не происходило?
У тебя это внутри одной программы? По-моему нулевой символ в буфере у тебя остается и потом через гетлайн записывается туда сразу.
Ну да, но я потестил, в main (первый скриншот) getline работает нормально, а вот в отдельной void функции (второй скрин) компилятор сразу выдаёт то, что по else (на третьем скрине можешь увидеть, он даже не просит ввести, сразу выводит текст и перескакивает на следующий ввод, где я оставил просто cin, без getline)
>>31755
Так я не из компилятора копировал, а просто для примера написал прямо в сообщении, немного невнимательно
Я же тебе говорю, у тебя cin берет из буфера твою цифру, а нулевой символ от нажатия enter нет. Когда программа доходит до getline, из буфера cin сразу берется этот нулевой символ, он естественно отличается от твоей строки s и программа переходит к else.
Добавь после cin>>a; строку cin.ignore();
Сработало, спасибо. Ты кстати как C++ изучал? Я просто выучил по SoloLearn, как написать простой код понимаю, но вообще как всё работает понимаю не очень
MPI. Проблема в том, что с openmpi всё работает, а тут процессы запускаются последовательно, что не есть кошерно.
>>31294
Мне не нужно разбивать массив по узлам, суть была в том, что один процесс кидает другому числа, тот их суммирует, кидает результат обратно, и первый выводит на экран. Но это неважно, я хочу понять, где я проебался при запуске.
Да по верхам немного нахватался только, нихуя я не выучил.
Это MPI. Код то у постера на плюсах, а сам MPI для си как разрабатывался (еще в 90-х), так и разрабатывается, поэтому у него такие биндинги.
>>31112
У тебя какой-то неправильный mpirun. Какого хуя оба процесса в rank=0? Гугли в этом направлении, мб поставил неправильно, либо mpirun И mpicc различных версий.
Так в том-то и прикол, юзал mpich, по мануалам всё должно работать, авотхуй. Он запускает один поток, абортит его из-за отсутствия второго, потом запускает второй поток и абортит его из-за отсутствия второго (так как он единственный). Что-то бред какой-то. Ладно, я уже понял, что проблема не в коде. Буду гуглить про сам мпи.
Спасибо, аноны!
Но что делать с ебучими варнингами?
>warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
их так много, что они мешают читат output компиляции.
Хуй его знает что за дебилы топят за int. Особенно удивляют дебилы, которые везде пихают static_cast<int> и используют его в беззнаковом контексте
Ошибки со знаковым int проще обнаруживаются.
И еще с ним в некоторых случаях код попроще получается.
> Ошибки со знаковым int проще обнаруживаются.
> И еще с ним в некоторых случаях код попроще получается.
Это мантра или у тебя есть примеры? Какие ошибки, какой код?
Э, бля, вобщет я здесь вопросы задаю.
Вываливай свои контрпримеры с кодом, если ты такой умный.
Путь С++ - путь, страданий. Терпи.
Где можно, используй ranged for, или таки size_t - в большинстве случаев он вполне безопасен.
protected:
virtual void initContent() { //... }
};
class B : public A{
protected:
void initContent() { //... }
};
Почему при вызове метода в B (Bobject.initContent()) вызывается метод из A?
Нвидия-кун, отъебись
>Теперь найди нормальную криптографическую функцию, которую можно написать c constexpr.
вася падпивасный
...
public:
A(int n = 1, int m = 1) {...};
};
Class B : public A{
...
public:
B(int n) {...};
};
Почему при вызове new B(n) сначала вызывается A(1, 1), а потом уже работает B(n)?
Помогло, спасибо
Потому что сначала вызывается конструктор базового класса. В этом случае неявно, т.к. все параметры по умолчанию. Убери один - вообще перестанет собираться, пока явно не укажешь
Предположим, в базовом классе у меня есть protected virtual метод, который вызывается в конструкторе и переопределяется в наследнике. Можно ли сделать так, чтобы во время вызова конструктора базового класса при вызове конструктора наследника выполнялся переопределённый метод, а не изначальный?
class A{
protected:
virtual void foo() {};
public:
A() {}
};
class B : public A{
protected:
void foo() {};
public:
B() {}
}?
std::ssize
Нет, невозможно. И даже если бы это было возможно, так делать очень плохая идея, вдруг метод в базовом классе делает что-то такое, что ты забыл учесть при его переопределении.
Ясно, спасибо
Класс A ничего не знает о своих потомках и не зависит от них. Соответственно, не получится.
Впрочем, есть способ. Каким-нибудь способом передать в A указатель типа A, указывающий на объект типа B. Затем в A::foo() обратиться по этому указателю к foo(). Так как метод foo() виртуальный, вызовется B::foo().
Но не делай так. Код становится нечитаемым, к тому же очень легко получить бесконечную рекурсию.
Когда вызывается конструктор наследника, сначала вызывается конструктор базового, в котором срабатывает метод foo, опеределённый в базовом, затем работает конструктор наследника, в котором вызывается собственно B::foo
vector<A*> v;
}
void bar(){
a = A();
v.push_back(&a);
}
Когда bar() заканчивает работу, объект a разрушается. Как сделать так, чтобы после выхода из bar() объект a не разрушился, а ссылка на него осталась в векторе?
bar вызывается в foo
>>33986
Почитай про область видимости переменных. В частности, переменная a видна только до конца тела if, дальше к ней нельзя обратиться.
Можно, например, вынести A *a за пределы тела if, а уже в самом теле писать a = new A();
оно пиздец какое скучное, требует запомнить много информации за раз, оттого и непопулярное
То есть ты считаешь, что у 10 условных человек будет одинаковый прогресс в этом деле за один и тот же промежуток времени?
У 10 разных человек, разный бекграунд
Именно для проги талант не нужен совсем. Может есть что-то вроде склонности, но это скорее про то интересно тебе или нет. Ну возможно в олимпиадной проге, то есть в решение задачек, можно быть талантливым, но как бы это не особо влияет по жизни, да и все равно там нужно прикладывать дохера усилий чтобы быть жестким
Если этих 10 человек держать в абсолютно одинаковых условиях с рождения, то да, прогресс будет одинаковый +- погрешность. Но уж точно прогресс не определяется рандомом до рождения.
А если точнее, то нужно мне менять масштаб через scale. Но качество картинки получается такое ебанейшее, что просто пиздец. Можно как-то повлиять на него?
Можно изначально делать итем достаточно большим, чтобы он всегда скейлился в меньшую сторону. А если у тебя там только векторная графика и шрифты, то вообще не вижу проблем.
Задание : Дано строка состоящая из цифр разделённых пробелами.
Вывести только чётные числа.
Моя прога : #include "pch.h"
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
int main()
{
int n, i, chislo;
char st[81];
puts(" Input string ");
gets_s (st);
n = strlen(st);
i = 0;
for (i = 0; i < n; i++) {
if (st == ' ' && st[i + 1] != ' '){
chislo = st;
if (chislo % 2 == 0) {
cout << st << "";
}
}
}
Задание : Дано строка состоящая из цифр разделённых пробелами.
Вывести только чётные числа.
Моя прога : #include "pch.h"
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
int main()
{
int n, i, chislo;
char st[81];
puts(" Input string ");
gets_s (st);
n = strlen(st);
i = 0;
for (i = 0; i < n; i++) {
if (st == ' ' && st[i + 1] != ' '){
chislo = st;
if (chislo % 2 == 0) {
cout << st << "";
}
}
}
#include <stdafx.h>
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
int main()
{
int n, i, chislo;
char st[81];
puts(" Input string ");
gets_s (st);
n = strlen(st);
i = 0;
for (i = 0; i < n; i++) {
if (st != ' '){
chislo = st;
if (chislo % 2 == 0) {
cout << st << " ";
}
}
}
getchar();
}
Если у тебя дана строка из цифр, то и выводить тебе цифры надо, верно? Для чисел нужна другая проверка, там хуй знает сколько надо разрядов. Я тугой в плане построения алгоритмов.
#include <stdafx.h>
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
int main()
{
int n, i, chislo;
char st[81];
puts(" Input string ");
gets_s (st);
n = strlen(st);
i = 0;
for (i = 0; i < n; i++) {
if (st != ' '){
chislo = st;
if (chislo % 2 == 0) {
cout << st << " ";
}
}
}
getchar();
}
Если у тебя дана строка из цифр, то и выводить тебе цифры надо, верно? Для чисел нужна другая проверка, там хуй знает сколько надо разрядов. Я тугой в плане построения алгоритмов.
А, ты так и сделал, у тебя макаба съела индексы тегом италика.
>прекомпилед хедер в проекте из одного файла
>вперемешку с другими инклюдами
>int chislo
>объявлять i не в цикле
><conio.h>
Комбо "laba1.cpp starter pack"
Абу своих ботов уже и на тематику натравил?
Хуй у них лабы закончатся. То сдать на последних парах, то сдать во время зачётиков, то сдать долг в следующем семестре.
http://cpp.sh/4je3h
Сорян за говнокод если что, я немного бухой + на чистом Си давно не писал.
А еще там кроме using namespace std - все из чистого си, лол
conio.h кстате классная вещ если она есть
Спасибо!
>"int atoi(const char )": невозможно преобразовать аргумент 1 из "char" в "const char "
Я уже забыл что там за хуйня с этими char массивами. Как введенную строку в константу-то превратить?
Поэтому и не классная, что есть не везде. На линуксе вот придётся жонглировать опциями терминала.
>невозможно преобразовать аргумент 1 из "char" в "const char* "
Правильно расшифровал? Ты хочешь символ в число перевести?
Тогда n = c - '0';
Да, из его примера i-ый символ из char массива.
GLM, но я не уверен в потокобезобасности, да и вообще, мне кажется не задача математической либы её обеспечивать.
что такое "потокобезопасная библиотека" в данном контексте?
Вся линейная алгебра это чистые функции, которые потокобезопасны по определению, не?
Не хранящие глобального состояния, например. Вдруг есть библиотека вида:
set_a(vector_a);
set_b(vector_b);
multiply();
int result = get_global_result();
conio.h и есть сторонняя по отношению к с++ библиотека.
Ананасы ещё вопрос возник.
Мне нужно распарралелить циклы управляемо, помню что есть openmp. VS 2010 стоит.
Задачи для копирования из массива в массив, а так же операций над ними.
Openmp мне хватит для этих задач? И возможно ли распарралелить копирование в оперативку, естественно каждая нить - копирует в один или группу каких-то неиспользующуюся другими нитями область или адрес?
распараллеливание будет выгодно, если над каждым элементом массива проводятся интенсивные вычисления на цп
в случае же перекидывания данных с одного места на другое прирост производительности в случае распареллеливания будет минимальный, так как вообще до доступ к оперативной памяти у тебя последовательный, ну а прирост будет лишь в том случае если память работает в двухканальном режиме
>если над каждым элементом массива проводятся интенсивные вычисления на цп
Я покупал новую плашку и написал для неё какой-то тест на коленке. Твои слова звучат немного как чушь, потому что если там просто в цикле a=i, то в несколько потоков это работает в два раза быстрее, хотя интенсивными вычислениями там даже близко не пахнет.
Любопытно, что произвольная запись работает с одинаковой скоростью, а произвольное чтение ускоряется. Читаются/пишутся разные ячейки, не одна и та же, само собой.
>если память работает в двухканальном режиме
Хотя я же не знаю что такое двухканальность. Одна плашка может работать в двухканальном? Это бы всё объяснило.
Что можете сказать о D и его будущем?
Все же вы тут народ опытнее и потолковее, чем на остальной доске
Мне тоже понравился D, но к нему нет ide, нет либ, нет ничего. И не будет.
Если бы был D вместо С++, это было бы чуточку лучше в целом для мира программирования, но на С++ уже такая база вообще, что это своего рода локальный минимум, причём очень-очень глубокий - и D не так сильно отличается, что бы его микроскопическая яма была хоть чуть-чуть заметна рядом с пропастью С++. Он сможет существовать только если у него будет полная обратная совместимость, так чтобы вообще любой крестовый код сходу компилировался и работал.
ну смотри, он появился в 2001, и на нем так до сих пор вообще никто и не пишет. И нет вообще никаких признаков, что начнут. Даже сам Александреску на конфах по С++ тусит нынче.
>Что будет, если бросить исключение в деструкторе
Если у тебя разматывается стек, то терминейт тебе.
>зачем вообще такое может понадобиться
Чтобы показать всем в интернете, какой ты дебил.
> Что будет, если бросить исключение в деструкторе?
Ничего плохого, пока во время размотки стэка не бросится второй, и там уже std::abort.
>Приглашаю сеньоров итт порассуждать, зачем вообще такое может понадобиться.
Если ты ебанутый, наверное.
Исключения в языке без сборки мусора - это полный пиздец. Если и кидать исключения, то юзать смартпоинтеры. И пох, в деструкторе это или нет.
Ничего, я позапрошлый раз раз смотрел за ним 4-5 лет назад, когда активно шли разговоры о разгоне гц, вроде как договорились что надо допилить гц чтобы он знал о типах и сделать генеративную сборку. Вроде как и такой, и даже паралельный с лоу паузами был, но никто не хотел переносить с D1 и допиливать.. Прошлый раз на него смотрел где-то год назад, все резко договорились что гц не нужен (работы в этой части за несколько лет сделано 0, лол) DIP25, DIP1000, делаем как в русте только круче, все дела. Посмотрел сейчас — DIP1000 послали нахуй, выкатили DIP1021 — как руст, только более кастратский вариант, что-то пыл резко убивился, лол. Нихуя не понятно что и как с ним, даже стд либа его скорее всего поддерживает примерно никак, зато в языке за это время появились ещё 2 сотни фич. Всё что нужно знать о D и о Александерску с Брайтом, или как проёбывать все полимеры 20 лет подряд.
Исключения вообще сами по себе пиздец, нарушающий структуру всего, это блядь, даже не goto, это эдакий типизированный longjmp, который по хорошему надо избегать вообще везде.
вот тут, пожалуй, не соглашусь. Исключения это охуенно, и помогают делать охуенный и красивый код. Правда да, в легаси говне и прочей параше ими пользоваться нереал.
А вот в чистеньком новом проекте на C++1488, вполне отлично
>>Исключения это охуенно
>>Нет ничего охуенного в нарушении контекста выполнения.
че? при исключении происходит раскрутка стека вообще то, контекст выполнения не страдает
а вот когда делаешь магию на сишном longjmp, то да, надо самому вытирать себе жопку
страуструп вообще считает возможность определения пары конструктор-деструктор и определения пользовательских операторов ключевыми особенностями языка, так как они лежат в основе создания новых типов данных
при этом как то ошибку нужно было возвращать оттуда
вот пришлось и исключения в язык вводить
Сейчас бы в 2к19 кидать исключения, лол-кек. Все нормальные люди возвращают Either[T, E].
как по мне, александреску убил вторую половину своей жизни впустую
а ведь его "современное программирование на с++" в нулевые были как откровение свыше, объяснение того, как, к примеру, можно часть паттернов из "банды четырех" реализовать на статике, на шаблонах, без использования ооп, без техники включения или без динамического полиморфизма..
все же нытик страуструп был прав, когда долго и упорно всем объяснял, что нужно развивать существующий язык, что нужно сохранять обратную совместимость, что нужно делать что-то новое, используя существующую инфраструктуру языка, а не бросать все и делать заново
>Исключения в языке без сборки мусора - это полный пиздец. Если и кидать исключения, то юзать смартпоинтеры.
у тебя есть пара конструктор-деструктор, которая позволяет использовать технику raii; std::unique_ptr реализует технику raii
вторая альтернатива - это подсчет ссылок; подсчет ссылок поддерживается std::shared_ptr
Нет, не через дерево вызовов. Сразу видно, что ты обычный микрочелик, который ничего серьезнее cout << "hello"; не писал, лол.
ну дык, у тебя память работает в двухканальном режиме..
тут какая забава получается: обычно когда ебашат синтетику, забиваю большой объем памяти в тестируемый массив, ну он и раскидывается по двум плашкам памяти, лол
ну и получают ускорение в 70-90%, что и неудивительно так как читаться/писать будет на обе плашки..
>Мне нужно в некоторых задачах именно параллельное копирование.
ты получишь заметное ускорение (процентов на 70%) если у тебя будут копироваться большие объемы данных, сравнимые с текущей емкостью озу у тебя на компе..
пиздабол
Вот бы он тогда ещё подумал о последствиях в виде текущей памяти. А не только через несколько десятков лет.
Тебе жалко чтоли памяти? Перегрузил сервер раз в сутки и все память снова в твоем распоряжении.
решарпер С++ ?
решарпер же
Аноны, поясните, пожалуйста, что не так?
Выходит пикрил.
Думал что это из-за того что использую i-1 в строке, которая с нуля идет, но попробовал переписать с начальным i - единицей, все равно эта ошибка вылазит, в чем проблема?
(на сайте не компилируется, т..к не открывает string.h, через vs19 компилируется, но выходит пикрил при попытке ввода слов)
ок, спасибо
i равно 0. Проверка на 14 строчке не проходит и поле этого в 18 строчке ты обращаешься к -1 элементу - программа падает.
В си-тред не ходи, этот кролик двинулся со своими std:: уже.
Очевидно, потому что у тебя нет проверки на (i<90), в итоге, когда i становится 90, ты выходишь за границы массива и получаешь по еблу от ОС за чтение чужой памяти.
мимо-расторак
В 14 строчке проверка никогда не выдаст true, потому что x не может быть сразу и пробелом и точкой. Ставь || вместо &&.
циклах нет проверки на конец строки
...
10. while (s != '\0' && s != '.')
...
14. while (s != '\0 && (s != ' ') && (s != '.'))
...
https://ideone.com/JXUIp7
макаба спиздила квадратные скобки и все что в них, зырь по ссылке короче
по условию конец строки это точка, забыл написать сюда
Второй выдаст false, и объединённые логическим AND они выдадут false. Я же написал, что твоя 14 строка никогда не выдаст true.
А, стоп, я проебался, и вместо "!=" вижу "==". Сорян, пойду просплюсь.
Постоянно ошибаюсь в подобных проверках условия.
Переписал с i+1, но в итоге все равно переполнение, теперь видимо в другую сторону, хотя вроде длину сразу ограничил
да я понимаю где выпадает, я не понимаю как использовать s[i-1] или s[i+1] если они постоянно переполняется
Можно даже без дебаггера, просто в каждой строчки по три раза (после каждого действия) выводи значение всех индексов и переменных - эдакий наколенный дебаггер.
У меня нет переполнений, у меня в бесконечный цикл твоя штука ушла, тому что индекс не вовремя прыгнул на 2 и проверки при которых i изменяется уже не могут пройти.
Тебе написать эту штуку? Я сейчас в душ залезу и могу написать с комментариями, если нужно; могу ещё и в дискорде всё объяснить потом.
Понял, сейчас попробую.
Было бы хорошо, но я ща еще полчаса сам покопаюсь, если не смогу напишу
char si = [92];
si[0] = 0;
si[91] = 0;
char *s = &si[1];
Не помню как в ваших этих крестах использовать указатель в качестве имени массива. Но можешь вот так вот сделать.
опять-мимо-расторак
В общем вот, я всё-равно уже почти написал - не поверил что ты разберёшься.
https://ideone.com/8yPDpi
Это максимально понятное разложенное по полочкам, что я могу придумать. Рекомендую примерно так и писать, и только уже сильно потом сворачивать все проверки в одну строчку с -1 индексами, когда понимаешь что оно будет делать, как и зачем. fgets - просто чтобы ideone скомпилировал, и чтобы при строчке длиннее 1024 строчка просто обрезалась без ошибок.
Это значит, что где-то в коде UB. Попробуй в релизе собрать или выключи SDL и Basic Runtime Check в дебаге, тогда меньше шанс зануления памяти, соответственно больше шанс вылететь из-за UB
Но ведь если бы не рантайм чек, хуй бы оно вообще упало. Так и читал бы, обмазываясь UB до первого нуля.
Как раз наоборот. В дебаге при включенных проверках больше шанс, что память будет в ноликах. Мелкие сами об этом пишут в описании к SDL/BRC
>>36948
Посмотрел, впринципе все понятно, state правда мы не использовали еще. Такую точно не примут, скажут своровал у кого-то, но спасибо, поразбираюсь сам
>Наконец-то закончил эту блоксхему рисовать... Программисты их вообще используют, разрисовывают?? Я просто не шарю пока
Лол нет. Вообще никогда.
а зачем нас дрочат ими так, я заколебался вот это рисовать
наверное вашему среднему преподавателю больше 50 лет, и из этих 50 лет он программистом не работал ни дня.
Как-то грустно теперь
Иногда. Именно блок-схемы — никогда, whiteboarding — иногда. Первое — ебанутая хуета, второе — полезно для понимания того, что ты вообще делаешь. И зачем.
Нам вообще говорят, что мы этим заниматься будем в будущем (блок схемы рисовать, а не прогать) типа спец-ка у нас такая (инф. системы и технологии)
и мы их все 4 курса будем рисовать. Походу я куда-то не туда попал
Диаграммы рисовать иногда надо. Там какая-нить коммуникация микросервисов там, различных компонентов и тд. Но она не формализирована, как хочешь так и рисуешь.
Но вот такую хуйню как на пикрелейтеде я рисовал только в универе, который нахуй дропнул потом.
При написании сложных алгоритмов некоторые иногда используют псевдокод. Но такие вот блок-схемы не использует никто и никогда.
>Он сможет существовать только если у него будет полная обратная совместимость, так чтобы вообще любой крестовый код сходу компилировался и работал.
Ты только что изобрёл Qt MOC
Я уверен, что до тебя к нему подходила не одна сотня студентов с этим предложением, ибо эта хуйня заёбывает всех до единого. Но препод остался при своём мнении.
Удваиваю всех выше про схемы.
Нарисовать схему для взаимодействия сложных структур в какой-нибудь фигне нормально иногда, но рисовать схему для i++ смешно просто - никто никогда в жизни не будет такие мелочи изображать на схеме. Тем более в таком уродском виде. Схема для каких-то глобальных концепций, а не для отдельных строчек или даже функций.
>>36998
Используй заместо state symb устанавливая его в ноль как вариант. Если он нулевой - то сейчас не число, если какой-то ещё, то там слово.
Или вот на: https://ideone.com/oB192G - но это сработает только с пробелами между слов и точкой в конце. ":asdf12&$!@:" - тоже будет словом, которое начинается и заканчивается на один и тот же символ.
Ты правда думаешь, что УВАЖАЕМЫЙ ЧЕЛОВЕК С УЧЕНОЙ СТЕПЕНЬЮ будет слушать какого-то сопляка? Попробуй, потом расскажи нам о результате.
И аргументы о том, что программисты 300кк\нс этой хуйней не занимаются очень врятли их убедят.
Не совсе понял. Ты хочешь настройти студию, что бы была похожа на vs code?
Если так, то это равносильно просто сделать её более легковесной, я так и сделал как мог. Поотключай все лишнее, весь визуальный мусор, к которому еще не привык, все эти боковые панели, красные полоски итд, всплывающие подсказки, оставь только то что деуствительно нужно и удобно. Из плагинов можешь попробовать найти плагин для терминала, это по сути единственное, чего очень сильно не хватает студии.
Нужно ли изучать кресты с нуля, если до этого дрочил шарпы? Много ли схожего, или это два совсем разных языка?
Ручная память (по большей части лечится RAII, но книги за 567 год, по которым все советуют учиться, об этом нихуя не знают), без статик анализатора (или RAII на любой пук) можно сразу сказать, что код работать не будет, если у тебя больше сотни строк в проге. В остальном современные кресты мало отличаются, учи сразу 17 или 20 фишки.
А что по стандартной либе и фреймворкам/другим библиотекам? Дикий дроч, или, разобравшись, становится более-менее легко?
Все самое интересное в коде с++ происходит "между строк", поэтому знать всякие мелочи критически важно.
>Много ли схожего
Тебе-то как раз должны быть важны не сходства, а точное понимание различий.
>с нуля
Цена вопроса околонулевая.
Лучше начать с нуля. Если для тебя что-то не окажется новым, то чтение и не займет много времени.
А если времени потратишь много, значит оно тебе было необходимо.
Пчел, есть сайты куда ты копипастишь код, и он сам рисует схему.
github.com - хороший сайт, жаль, что не популярен.
А можно как-либо подменить delete/new не для отдельного класса через перегрузка - а вообще во всех случаях? Хочу сравнить стандартный менеджер со своим. Я погуглил, но по запросам перегрузки delete/new идут только их перегрузки для отдельного класса - но это и так очевидным образом делается. Ткните пальцем какой запрос вбить, пожалуйста, если это вообще возможно.
> А можно как-либо подменить delete/new не для отдельного класса через перегрузка - а вообще во всех случаях?
https://www.geeksforgeeks.org/overloading-new-delete-operator-c/
Всё, нашёл кое-как. Кошмар, сколько там вариантов для старых/новых стандартов и потом ещё для aligned, noexcept и квадратными скобочками во всех комбинациях.
Кстати повторюсь ещё раз и соглашусь с мнением выше, что исключения не нужны. По умолчанию вообще всё должно быть noexcept, и только в каком-то очень редком случае, когда ты используешь исключения - только тогда нужно поставить какой-нибудь мерзкий спецификатор по типу _e_X_c_e_P_t_a_b_L_y_, чтобы смотреть на него больно было.
>>37517
Мм, спасибо. Сам уже нашёл правда, но всего несколько минут назад. Глобальная перегрузка, брр.
а я, повторюсь, что исключения нужны как минимум потому что в языке существуют конструкторы и пользовательские перегрузки операторов
все что ты перечислил - плохие подходы к проблеме
в стандартной библиотеке есть механизм аллокаторов, через него и следует проворачивать такие вещи
точка
насколько я понимаю, квест по переезду в канаду тот еще:
типа чтобы получить визу и статус резидента, нужно набрать баллов
а баллы набираются
нужно высшее образование, и нужно конвертнуть диплом
нужен подтвержденный опыт работы, и потом нужно оформить документы подтверждающие его
нужно знать английский язык, причем это знание подтверждается тестированием ielts
нужно иметь на счете в банке 12к баксов, минимум, эта сумма тоже должна быть подтверждена
причем каждый этап требует пусть и не бумажной, но электронной волокиты, и обойдется минимум в 2к баксов
на самом то деле это нихуевый квест
и для чего все это нужно?
а чтобы переехать в ванкувер, устроится там куда-нубудь работать, ебашить как проклятый, реально вьебывать, при этом ты будешь тупо выходить в ноль, откладывать ничего не получится по крайней мере первые года
охуенно
ловушка для умных дураков, на самом то деле
bool IsBigChar(std::string str)
{
std::cmatch result;
std::regex regular{"^[A-Z][a-z]"};
return std::regex_match(str.c_str(), result, regular);
}
По задумке оно должно возвращать тру, если 1 буква большая, а остальные любые латинские
Зачем вообще использовать unsigned для таких маленьких значениях?
Как сказал чел выше, глупо сранивать беззнаковое с нулем. У тебя скорее всего при вычитании числа, больше чем хранит переменная, число становится очень большим. Поэтому перед тем как вычитать добавь проверку
Я пытался в проверку. Сначала было без unsigned, но когда значение хп становилось меньше 0, то цикл не прекращался, а продолжался уже с минусовыми значениями
Спасибо анон
Спасибо
> нужно высшее образование
Изи. Просто взял и без задней мысли получил заочно бакалавра в шараге в родной мухосрани. Да и очно не так уж сложно отучиться, а если в нормальном вузе, то даже в удовольствие (МФТИ, например).
> и нужно конвертнуть диплом
Не нужно.
> нужен подтвержденный опыт работы, и потом нужно оформить документы подтверждающие его
3 года работаешь на какой-нибудь адекватной галере, которая устраивает тебя по ТК.
> нужно знать английский язык, причем это знание подтверждается тестированием ielts
В 2019 это не должно быть проблемой. Сдать экзамен не сложно, стоит не дорого.
> нужно иметь на счете в банке 12к баксов, минимум, эта сумма тоже должна быть подтверждена
Это вообще самое лёгкое в квесте.
> причем каждый этап требует пусть и не бумажной, но электронной волокиты, и обойдется минимум в 2к баксов
Откуда 2к-то? Переборщил.
> и для чего все это нужно?
> а чтобы переехать в ванкувер
Нахуй этот китайский оверпрайсед гадюшник не нужен. Едешь в Торонто, зарабатываешь нормальные деньги, получая отличный ворклайф бэланс, через несколько лет получаешь паспорт нормальной страны. А потом и в Швятые можно без задней мысли ехать, в Bay Area или Сиэтл на $250k+/год.
А ты сам то откуда?
Годнота.
Возвращать указатель?
Точнее ситуация даже такая: есть несколько классов с одним методом, который по своей сути делает одно и то же, но те, кто использует этот метод, должны знать, что он возвращает экземпляр этого же класса.
Так вот думаю по-хорошему надо для них создать абстрактный класс и как-то указать, что у наследников есть такой вот функционал. И еще метод должен даже не экземпляр класса возвращать, а QStack с типом этого класса. Проблема в том, что если ты в абстрактном классе указываешь, что метод возвращает QStack<base>, но в наследнике надо, чтобы он возвращал QStack<derived>, то перезаписать он не может.
С указателями все работает, но со стеком было бы красивее конечно.
У виртуальных методов тип (если это не указатель/ссылка на сам класс) изменить нельзя. Все дочерние методы будут возвращать экземпляр базового класса, крася твои трусишки в коричневый цвет
Тут даже вопрос не в том, как сделать чтоб работало, а как лучше вообще идею выразить.
Можно приводить типы к потомкам, например. Но возвращать разные типы в потомках не выйдет, ты ломаешь сигнатуру базового метода.
Возвращать std::variant с нужными реализациями?
А зачем он в C++-треде, это же лисп.
Сикп выбросили нахуй даже в том универе, в котором его придумали
Дано:
enum class MyEnum : long
{
val1 = 2,
val2 = 3,
val3 = 4
};
Нужно:
std::tuple
<
std::integral_constant<long, 2>,
std::integral_constant<long, 3>,
std::integral_constant<long, 4>,
>
Про буст знаю, есть дрисня вроде mpl::range_c, но выходит слишком громоздко, есть mp11::iota, но там только с нуля отсчёт, fusion идёт нахуй вместе с hana
реально сделать только если енумы идут подряд и известен первый и последний. Жди рефлексии.
Дабл. Есть еще екстендед и квад точность по моему, но это уже екзотика. На самом деле все говно.
Если попробуешь это 64 бит
(0.1+0.2)+0.3 == 0.1+(0.2+0.3)
результат будет false
Если возмешь флоат 32 бит
(0.1f+0.2f)+0.3f == 0.1f+(0.2f+0.3f)
результат будет true, лол
__float128, функции к нему в quadmath.h - 30 с хреном знаков после запятой. Но он в раз в двадцать медленнее (тому что программный и не имеет аппаратной поддержки), чем десятибайтовый long double, который работает всего на 10-20% медленнее, чем обычный восьмибайтовый double.
Массив байтов и несколько функция для длинной арифметики. Но это обычно не плавающая точка.
а, я там наебался, забыл последний элемент. Это в Make_integer_sequence + 1 надо добавить
По видосикам на ютубе научился? Я это 2 раза смотрел уже, не въехал, без удобной отладки не получается полностью понять, в какой вид шаблон разворачивается. Ты как боролся с этим?
Потратил больше времени, наверное. Для несложных тимплитов есть https://cppinsights.io - поймешь как работает, а дальше уже сложные сможешь в голове писать. По кр. мере у меня получается.
Спасибо
Ты прав, видимо нужно больше практиковаться, спасибо.
На шахматной доске для заданной клетки построить диагонали координаты i, j клеток диагонали пушатся в конейнер, проходящие через эту клетку.
inb4: Не лаба. Задачка из книжки. Я-то наговнякал решение, но как-то много if получается для такой простой задачи.
много ифов - это нормально для нюфань. А задачу из твоего описания я не понял
Я не знаю как словами описать, вот три немного разных по смыслу функции: https://ideone.com/qoDiG3
>как-то много if получается
Во втором (m_2) варианте нет ифов, но там цикл очень угрёбищный, хуже него только цветовая схема в моей ide.
Очень нравится писать короткие программы на одну функцию - целыми днями бы их писал. А то эта занудная фигня со структурами и шаблонами, брр.
Какая у тебя задача, что не хватает флоата? Я сильно сомневаюсь что тебе даже даблы нужны, не говоря уже о больших типах из математических библиотек. Ну и да, нельзя просто взять и использовать их, ибо они в двоичной базе и многие десятичные значения не могут быть точно представлены, надо обвязать дополнительной логикой. Вот читай классику https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ и всё остальное у него под тегом floating point
640x480, 0:02
Оу, аж три решения. Чаю тебе!
все очень сильно зависит от задачи
к примеру, иногда лучше вообще использовать библиотеки (или самим писать) реализующие арифметику рациональных чисел, тк они вообще не теряют точность
такие дела
тебе же все равно в компайл-тайм надо ))
тупо сгенерируюй и множество и тапл, тем же макросом ))
Чем макрос отличался бы от метафункции? Если что, енам там на пару сотен элементов. Препроцессор буста тоже идёт нахуй.
>они вообще не теряют точность
В том-то и дело. Когда делаешь какие-нибудь длинные вычисления над числом, типа деления/перемножения в цикле, оно заботливо сохранит все сомножители. Ну сократит парочку, конечно, но рост числителя и знаменателя потенциально неограничен.
алсо
>арифметику рациональных чисел
sqrt(2)
В общем, зависит от задачи: для расчета зарплаты с умножением на НДС подходит, для трассировки лучей - нет.
Я погуглил, всё унылое на первый взгляд.
слишком много математики там имхо
чтобы там набить много задач, приходится осваивать тот матаппарат, который тебе не пригодится
чисто как развлечение сойдет, кому нра математические задачки
попробуй лучше реализовать алгоритмы, которые делают в современной крипте..
там много всего интересного выкатывают буквально каждый месяц..
попробуй написать хуевую текстовую консольную игру. Это гораздо полезнее, чем задачки.
Ту, вроде ничего. Но очень много с виду глупых.
>>39468
А в чём суть? Не очень представляю что такое текстовая игра, полистал описание - не понимаю что они имеют ввиду и в чём там элемент игры.
>>39464
>в современной крипте..
Вот это уж точно про "приходится осваивать тот матаппарат, который тебе не пригодится".
Посмотри текстовые квесты, к примеру. Там показывают описание ситуации и насколько вариантов выбора, от которых в дальнейшем что-то зависит.
мимо
Сингллеерный MUD (да, знаю что тавтология) - потом сделай его мультиплеерным и тд. Это реальная задача, в которой надо будет думать.
С одноклассником на перемене искали такую, пару натуральных чисел, что при деление одного на другое получалось число пи приближенное. У меня в какой то момент перестали находиться новые числа. Как я понял из за того что точности не хватает
Мне тут один анон доказывал, что так низя передавать массив, но слился так и не объяснив почему. Цикл вечный, это не важно.
void MakeAnswerToAntuan( Cls_Anonymous &SomeAnon )
{
whlie( SomeAnon .IQ < 10 )
{
cout << " Пшов нахуй" << endl;
}
}
Универсальность?
А зачем ты его используешь?
могу провести консультации, скайп, телеграмм
яндекс деньги либо прямой перевод на карточку сбербанк
1500к в час
устраивает?
Не, просто скажи, как вызвать функцию pcap_open_offline для файла, который лежит не в текущей папке?
readline это такой пепелац для организации cui, те для организации взаимодействия твоей проги с человеком, а не в качестве конвеера с другими прогами (если примитивно говорить)
если бы не анальная лицензия, то он бы поактивней использовался в проектах, а так когда нужно пилят свои поделия
Да все так, просто на винде разделитель пути в другую сторону. Хосспаде, ну и срань.
"настоящий" массив можно передавать по ссылке, это да
но нужно понимать что у него будет фиксированная размерность, а это неудобно в большинстве случаев
тем более, если это с++, то у тебя вместо этого можно передавать константный вектор, можно передавать std::array, а с 20го стандарта еще и появится вещь, похожая на string_view но для массивов и векторов
CLR не значит clear, а Common Language Runtime.
ШТО?
У меня там в классе есть динамический массив, который есть указатель на блок памяти. Что же это получается, по ссылке на класс с ним он по старой и доброй традиции будет передавать только первый элемент?
Угу. Но это странно, во всех нормальных либах работает.
А, я наоборот прочитал "нацело".
Ебать, что за брейнфак? Лучше так: static_cast<double>(x) / y
По идее, чтобы писать на крестах без отстрела ног. В MS этого достигли отстрелом всего, кроме ног
Александреску не очень релевантен, если у тебя есть С++17. Но как хобби чтиво для разрыва мозга - ок.
Добавь в References проекта другие проекты. Разумеется, они должны быть DLL, static lib или utility. В первом случае ещё нужно пару макросов написать для экспорта символов. (Можешь создать новый проект, там студия уже сгенерирует всё, что нужно - оттуда можешь брать)
Делать либу ради нескольких вспомогательных функций, которые никак не связаны между собой? А попроще как?
буст так и делает.
У тебя какой-то неправильный интернет. Первая ссылка в гугле:
https://github.com/Akagi201/learning-cmake/blob/master/docs/mastering-cmake.pdf
>который ниже какого-то лимита выделяется на стеке, выше лимита - в куче. Короче нужен динамический массив, чтобы при этом не дрочить лишний раз кучу.
std::string
нет, посты удаляются только в закрепленных тредах. а это простой тред, который может утонуть(исчезнуть) если упадет на дно доски
Чет у меня плодятся заголовки, которые нужны только в одном месте и все.
в спп же можно без заголовков писать вроде
Это мертворождённая технология, выбери что-нибудь другое
"sudo" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
ну, 2020 точно будет годом линукса на десктопе
Бьерн страуструп говорит, что образование и опыт в программировании не важны. Нужно ПРОСТО брать и писать код. Все.
еще бы он так не говорил, кто его книжки то покупать будет?
Ну а как иначе научиться?
>Бьерн страуструп говорит, что образование и опыт в программировании не важны.
В результате получился си плас плас.
Через bitblt совершенно точно можно скопировать кусок чужого окна, и соответственно один пиксель тоже. Если тебе нужно считать больше одного пикселя - копируй через bitblt в буфер - это очень быстрая функция и не нужно возится с windows-структурами после неё, у тебя тупой буфер в виде одного массива останется после извлечения. И это вопрос по winapi же, а не по плюсам.
И вот ещё функция. GetPixel принимает hdc же, да? Только потом ReleaseDC не забудь вызвать, а то оно с ума сойдёт через некоторое время.
Так прошлый опыт не важен. Каждый проект пишется с чистым разумом с чистого листа!
https://github.com/AI-Decay/Coursework
Да нет, с точки зрения логики все норм
А вот за перенос s=с; на новую строку/невыделение тела if-блока скобками я бы на бутылку посадил
Оно робiт, только отступы криго расставлены. По факту в тело for входит только s = c;
Дальнейший код в цикл не входит.
Во-первых \0 затрет последний символ, не? Надо сначала индекс i прибавить, а потом туда нулевой символ пихать, правильно? Алсо массив будет УЖЕ создан в main и размер в памяти будет определен с количеством элементов, i будет возвращать lim, т.к. "пустые" символы будут с мусором из памяти, разве нет?
>>42754
Ну так и надо, нулевой символ один нужен в конце, а не цикле.
>Во-первых \0 затрет последний символ, не? Надо сначала индекс i прибавить
Нет, перед выходом из цикла сработает i++ из заголовка for
Прочитай задание еще несколько раз, и заодно загляни на страницы, где написано как работает for. А лучше выкинь нахуй это говно, го к нам на раст, почпокаемся
Точнее i++ выполнится перед последней проверкой условия
Теперь понял, но возник новый вопрос. Почему при объявлении счетчика внутри круглых скобок for область видимости ограничена, как будто это внутри фигурных скобок?
пошел нахуй педераст
Вернее я нихуя не понял, если я ввел например 2 символа, на i=3 цикл остановился, в этот индекс я записал нулевой символ, почему к счетчику все равно надо прибавлять единицу? Тогда 4 будет по такой логике.
А, все, индексация с нуля ведь идет, забыл совсем об этом.
Но вот про область видимости у параметров for это что-то новое для меня.
std::pmr::vector с пулом на стеке.
>Почему ... область видимости ограничена
Раньше было лучше в си не допускались объявления в заголовке for. А Страуструп запилил эту фичу как раз для того, чтобы не засиралась внешняя область видимости.
Что не так? Тебя украинский смутил?
в условии if тоже можно
Погромирование начинается с англюсика.
А как готовить? Допустим, хочу обработать ошибку в конструкторе класса, как реализовать такое с этим вариантом?
Никак, лол. А в каждом методе делать проверку, что значение существует, и если нет, возвращать пустое значение. Привет от сишки и Go с его if err != nil.
Я не понял, у тебя ошибка при создании объекта? Если так, то это тебе ничем не поможет. Твои варианты - это а) кинуть исключение, б) переписать класс так, чтобы у него появилось "невалидное" состояние, типа bool m_isInitialized; и дальше что-то делать с этой информацией, в) переписать код так, чтобы класс не создавался если не выполняется какое-то условие, которое раньше было в конструкторе, г) создать make_* функцию, которая инкапсулирует пункт в
Обычно используют второй вариант, чтобы лишний раз исключения не бросать.
Если у тебя просто вызывается какой-то код, который может выполняться с ошибкой, то пишешь что-то вроде
std::variant<MyType, ErrorCode> LoadMyType()
{
...
if (!opened)
return ErrorCode::MyError;
...
return MyType(smth);
}
auto res = LoadMyType();
Дальше много вариантов развития событий: писать std::visit для типов - громоздко
или
auto const ★ myObj = std::get_if<MyType>(&red);
if(myObj)...
или
if (res.which() == 0)
...
Я про то, что использовать виндовс х смысла нет, давно появились намного более удобные библиотеки для создания контекста, к тому же кроссплатформенные.
А жлБегин и прочее - это из древнего стандарта опенжл. Сейчас принято использовать VAO/VBO (опенжл 3.3+). Учить их, правда, сложнее.
Пайдет. Будь я преподом, поставил бы А Ты же сам писал?. Конечно это если ты бы не слился на вопросах и доке курсача.
А теперь ИМХО:
1. Сохраняй исходники в UTF-8. Я установил екстеншн force utf8 no bom.
2. Проверка места, занято или нет, сравнением имени с пробелом - так себе решение (Почему пробел? Почему не просто пустая строка?). Лучше добавить метод bool Place::isOccupied() const.
3. Какой-то мутный метод void Railcar::CreatePlase(), вот нахуя он?еще и с опечаткой. Сразу в конструкторе инить вектор нужным числом. Кстати в таком случае поле CountPlace не нужно, так как оно дублирует информацию из вектора. Его можно заюзать как счетчик реально занятых мест, и быстро определять есть ли в вагоне свободные места. Ну, это тебе наверно не надо.
4. Поработай над передачей аргументов. Некоторые лучше было бы передать как const&. А в некоторых местах, например, сеттеры, где передача по значению, не хватает std::move.
5. Тоже с геттерами - самим методам не хватает константности, и, если геттер константен, незачем возвращать копию поля класса, можно const&
6. main можно было бы поразбивать на ф-и.
7. Парсинг юзерского ввода пролистнул, но там тоже есть что улучшить.
Спасибо, писал сам, сдал на А, в следующий раз учту замечания. Больше всего проблем было с бустом, никогда раньше не пользовался, был рад что оно хоть работало.
Вообще реализация всего этого по заданию должна была быть на С#, но мне разрешили на плюсах написать
А передавать в конструктор какой-нибудь ErrorHandler не вариант? Или тот же std::variant<MyType, ErrorCode>?
> в) переписать код так, чтобы класс не создавался если не выполняется какое-то условие, которое раньше было в конструкторе, г) создать make_* функцию, которая инкапсулирует пункт
Можно пример? Благодарю за помощь.
> А передавать в конструктор какой-нибудь ErrorHandler не вариант? Или тот же std::variant<MyType, ErrorCode>?
У тебя всё равно объект создастся. Если в конструктор передавать out-параметр с ошибкой, получится неочевидное и нечитаемое месиво. Хотя можно передать этот ErrorHandler как in-параметр и заставить его бросать исключения, но это тоже такое себе.
> Можно пример?
У тебя конструктор наверняка выглядит как-то так
MyClass(...)
{
...
if(uslovie)
{
std::cout << "pizdec\n";
}
}
Замени вот это на
std::variant<MyClass, ErrorCode> MakeMyClass(...)
{
...
if (!uslovie)
return ErrorCode::pizdec;
...
return MyClass(...);
}
Можно без variant, с optional
Лучше приведи сам пример того, что сделать хочешь.
нужен рабочий kernel mode rootkit, возможно нужна будет его адаптация для твоей "полезной нагрузки", нужен набор рабочих эксплойтов для доставки и разворачивания руткита..
У тебя что, ни разу антивирусы не ругались на хеллоу ворлд? А у многих они ругаются. И хуй с этим что-то сделаешь.
Пиши авторам антивирусов, пусть твой сертификат к себе в базу добавляют.
Или заставляй пользователей отключать его, или в исключения добавлять.
А сначала на вирустотал загрузи
> Никак. Современные антивирусы могут и обнаруживают абсолютно любую угрозу. Алсо, малварь запрещена правилами борды, алсо помни об УК РФ.
Как вы могли подумать об этом? Мне необходимо проверить на безопасность свой собственный пк. Интересно изучить, надёжно ли защищён мой компьютер, если его попробует взломать злоумышленник
>>43443
> нужен рабочий kernel mode rootkit, возможно нужна будет его адаптация для твоей "полезной нагрузки", нужен набор рабочих эксплойтов для доставки и разворачивания руткита..
Зачем такие сложности? Разве не хватит обычного обфускатора + криптора?
>>43676
> Пиздуй в тред по инфобезу
> или в /hack
Спасибо
Если ты хочешь шлепать формочки на С++ - то тебе в qt + опционально Verdigris, как замена MOC.
Студийные да - дотнет. Есть еще WinRT, но я не трогал его.
случайно сажа приклеилась
Да мне лаба1 нужно сделать, я понимаю, что qt сейчас обычно используют, но я на студии сижу, в ней я хоть немного что-то попробовал в отличии от остального.
Просто читаю книжку, а там эти указатели ^, массив по-другому объявляется и т.д.
C++\CLI это совсем другой язык
Если тебе лаба1 на 2 кнопки - можешь попробовать через классическое Winapi, а-ля CreateWindow
Да я выше писал(или это был прошлый тред), это должен быть интерфейс к бд. Я думал через технологию ado.net в VS как раз сделать как у Пахомова в книжке.
с одной стороны как бы да. Но после перехода на кресты будешь писать немного иной код, нежели те, кто сразу писал на крестах. Хз хорошо это или плохо. Си более строг, нежели Си++
Пишу обертку для винапи и хочу сохранить возможность получать код ошибки. Инициализации объекта происходит через YobaCreateSomthing и возвращает код ошибки, надо пробросить этот код через конструктор и все.
помогите мне разобраться с qt под андроид. Моя операционная система ubuntu 16. Мне нужно собрать приложение на qt под андроид. Вроде как нужно использовать clang для компиляции под андроид, потому что в новом ndk убрана поддержка gcc. Но qt не видит clang, хотя он установлен. Я пробовал искать решение в интернете, и на форуме qt есть тема со схожей с моей проблемой,
но там проблема не решена.
Но там есть сообщение
Я не понимаю, мне нужно перекомпиливать весь qt с помощью
clang чтобы мой проект на андроид компилился с помощью clang? Объясните мне пожалуйста, просто я не работал толком никогда с
sdk и ndk андроида.
Ты слишком хорошего мнения о большинстве вузов.
Код выглядит как
MyYoba(){
HRESULT res = YobaCreateSomething(&m_winYoba);
}
?
Попробуй
std::variant<MyYoba, HRESULT> MakeMyYoba()
{
WinYoba winYoba;
HRESULT res = YobaCreateSomething(&winYoba);
if (FAILED(res))
return res;
return MyYoba(winYoba);
}
а вообще, ты думаешь MS случайно два раза обосралась сначала с MFC, потом с ATL? Не благодарное это занятие, писать обёртки над винапи
Может ты вызовы важны какие-нибудь обернул в макросы типа assert, вот оно в релизе и выпилилось. Или в коде где-то UB и проявляется после включения оптимизаций.
Не работает:
QString name=ui->authorNameTextField->text();
ui->label_14->setText( name);
Работает:
QString name=ui->authorNameTextField->text();
ui->label_14->setText( "name");
Удалил старый проект, теперь и в дебаг сборке не работает
блять пиздец я дегенерат, крч я поставил в ебаном эдиторе при нажатии на кнопку "добавить" связь на очистку поля откуда взяты данные, и в режиме отладки значения считывались быстрее чем происходила очистка
Да, примерно так. А с уничтожением объекта как быть? Как оттуда результат вернуть? Мне нужно знать, что там очистилось все.
qt 5.11.3, ndk использую r17
# define
Я не спец в winapi, но разве такое вообще возможно? Скинь ссылку почитать.
И что предлагают делать в такой ситуации? Не очищать?
Я пишу auto& =. Если посмотреть на godbolt, то куча разыменований даёт один в один такой же код, как и доступ через ссылку-синоним. Но если у тебя указатели поменяются разыменования продолжат работать, а ссылка - нет. Не представляю почему они аналог дельфийского with не выкатили.
>>45136
Тебе нужен глобальный кусок памяти. Твой массив (и твои указатели) существует только в адресном пространстве твоей программы. Смотри VirtualAlloc, GlobalAlloc и иже с ними.
Вроде бы там можно выделять кусок памяти, и давать к нему доступ на чтение, на запись и на выполнение.
Я пытаюсь прибавлять double к double, но переменная почему-то при присвоении превращает число в нечто непонятное. В чём прблема?
Я почитал, я начал подозревать, что мне нужно явно указывать количество знаков после запятой для каждой переменной. Верно?
На первой картинке вычисление времени выполнения блока кода, на второй простой подсчёт количества условных тактов и проверка таким образом на прохождение некоторого времени.
ElapsedTime вычисляется без ошибок
> QObject::connect(&cmd, SIGNAL(clicked()), &label, SLOT(setNum(34)));
WM_COPYDATA
Всему твоему паровозику тогда тоже пиздец.
Что то не помогает
> QObject::connect(&cmd, SIGNAL(clicked()), &label, SLOT([](){setNum(4);}));
Для начала почитай как хранятся в памяти числа с плавающей запятой. Мантисса, характеристика и тд
Ну знак, порядок и мантисса. Но для разных типов же разное колличество бит под каждый раздел
В общем случае нельзя определить тип данных, не имея дополнительной инфы, это просто байты, которые могут быть чем угодно.
Я ничего не знаю про cheat engine, но почти наверняка он может найти что-то только в исполняемых файлах или библиотеках, где формат жёстко задан. В произвольном же бинарном файле, который взялся невесть откуда, он вряд ли что-то найдёт.
меня интересует библиотека, которую я нашел на гитхабе, а именно https://github.com/whoshuu/cpr , которая позволяет делать post/get запросы.
Но я никак не могу понять как добавить эту библиотеку в среду. Т.е. кинул по пути, где другие библиотеки (пик 3), среда не выдает ошибок.
При попытке скомпилить линкер выдает ошибку, которая связана с библиотеками (пик 2).
Помогите плз, я реально не могу этот момент уловить второй день.
То что с гитхаба скачал - пик 4. Оттуда перебросил 2 папки - include и cpr.
ПАМАГИТЕ ПОЖААААЛУЙСТА
Ебан, пути к инклюдам\либам надо устанавливает в проекте, а не кидать в папку студии.
СПАСИБО!!! Потещу завтра как выйдет
Я перекат с питона, где все за тебя делается
Т. е. я скачал библиотеку, мне нужно специально место для них и в каждом новом проекте я должен ссылаться на папку, где. h и .cpp файлы?
Я правда думал что кинул в кучу все либы и он сам потянет что нужно. Кстати lib это по сути просто пак заголовков и объявлений, да? А то с гита отдельно файлы не в формате либ.
Ещё вопросик:
Хочу запросом из интернета цеплять словарь, где слева именам соответствует имя переменной, а значением - значение переменной.
Т. е. был словарь например {"a" : 3}. Как создать переменные заранее известного типа с этими именами? Это же невозможно вобще, да?
(в пинотне просто locals().dict() и он словарь в переменные преобразует)
>Я перекат с питона, где все за тебя делается
с какой целью?
>Хочу запросом из интернета цеплять словарь, где слева именам соответствует имя переменной, а значением - значение переменной.
начни с того, что к тебе приходит не словарь, а ебучий текст, который ты должен распарсить еще.
> Как создать переменные заранее известного типа с этими именами?
это в принципе хуёвая практика в программировании, когда хуй знает что берется хуй знает откуда. то, как ты будешь получать значения из запроса, может очень сильно отличаться от библиотеки к библиотеке.
>Т. е. был словарь например {"a" : 3}. Как создать переменные заранее известного типа с этими именами?
Если ты питонист, то ты вроде как должен знать каким образом работает словарь.
Точно не скажу, но по идее там хеш-таблица со структурой, которая содержит информацию (структуру) о типе (int/не_int/ещё словарь) и содержит нужное значение или указатель на него.
Если ты хочешь сделать то же самое на крестах, то убьёшь большую часть производительности и сделаешь очень много рутины и велосипедов. И это будет не переменные, это будет обращение к хеш-таблице по индексу "a" - что собственно и делает за тебя питон.
Ну или придётся вникнуть в стандартную библиотеку, там вроде как есть std::variant для разных типов, который я никогда не использовал.
Тебе зачем такое? Если для питона это естественный инструмент, то для крестов - довольно-таки противоестественный.
> QObject::connect(&cmd, &QPushButton::clicked, [&](){label.setNum(45);});
Хотя если написать такое говно, то всё работает, но почему хуй его знает
>Это же невозможно вобще, да?
вообще это возможно с препроцессором или с макросами. в свифте есть codable, 1 это генерируемый обвес к структуре, 2 это как выглядит структура для программиста.
скорее всего в сях есть такая же хуйня уже готовая, и вообще то свифт ебаное говно и хотелось бы воздержаться от его упоминания, просто я еще нуфаг в сях
>Ты что не видишь CMakeLists? Гугли как собирать библиотеки
Выжу, скачал CMake, охуел с того что там нет файла .exe, который можно открыть и собрать библиотеки. Крч непомерно сложно, правда. Совсем не юзер френдли
>>45846
>>Я перекат с питона, где все за тебя делается
>с какой целью?
Задача была отображать оверлей поверх окна. На питоне безмерно костыльный метод, который еще и ресурсоемкий.
>>Хочу запросом из интернета цеплять словарь, где слева именам соответствует имя переменной, а значением - значение переменной.
>начни с того, что к тебе приходит не словарь, а ебучий текст, который ты должен распарсить еще.
там json слава богу, библиотеку для работы с ним тоже нашел, жаль не понял как установить. Коллекции/словари есть - думал будет изи
>это в принципе хуёвая практика в программировании, когда хуй знает что берется хуй знает откуда. то, как ты будешь получать значения из запроса, может очень сильно отличаться от библиотеки к библиотеке.
понятное дело, но есть просто список переменных, начальное значение которых есть на сайте. Ну кстати можно все переменные объявить, а потом значения подгрузить с сайта. Но в питоне было так просто целиком словарь преобразовать.
>>45858
>Если ты питонист, то ты вроде как должен знать каким образом работает словарь.
Понял, звучит мудро на самом деле
>>45977
сложно, свифт не видел никогда в жизни.
Написал говно - не понимает, почему не работает.
Написал норм - назвал говном, не понимает, почему работает.
Почитай ты уже ебучую статью в кутишной вики про сигналы и слоты
И указатель захватывай по значению бля
> Выжу, скачал CMake, охуел с того что там нет файла .exe, который можно открыть и собрать библиотеки. Крч непомерно сложно, правда. Совсем не юзер френдли
Тебе надо было vcpkg скачать, дурашка
Лол. Он правда дробняе не ищет
Как ты её блядь размещаешь тогда?
Научись писать интерфейс на крестах, а не перетягиванием виджетов на формочку. Забудь вообще о такой функциональности
> Научись писать интерфейс на крестах
С этим проблем нет. Но хочется быстро и наглядно накидать на формочку.
> Как ты её блядь размещаешь тогда?
Перетягиванием блядь. В контекстом меню кнопки можно перейти к слотам, но на этом всё. Самого объекта в коде нет
Он должен появиться как член ui. Если ты конесно файл сохранил
То есть ты не представляешь себе, как собирается твой проект? Пиздец.
> Ее скрипты что-ли догружают?
This
> Как тогда эти данные можно получить?
Внезапно, запустив эти скрипты.
Поэтому современный веб такое говно.
> Сомневаюсь, но это можно как-то сделать на плюсах? Может библиотека там какая, хз
К сожалению, да. Гугли webkit, webengine и т.п.
Но тебе 100% не понравится, лучше скинь эту задачу на кого-нибудь другого
>пытаюсь распарсить html-страницу на плюсах
для страницы, что содержит сложный динамический контент есть 2 пути:
первый - использовать браузер
под виндой ie automation, там все просто, только надо шарить в com хоть чуть-чуть
под линуксом чуть сложнее - ты пишешь расширение браузера, которое будет работать с твоим сайтом, потом прогой запускаешь браузер в котором это расширение отработает открыв сайт, и выдерет тебе нужные данные, которые сбрости куда-нибудь, да хотя бы во временный файл в каком-нибудь формате, или еще как; а потом уже твоя прога возмет эти данные
второй путь - использовать библиотеки типа microsoft C++ REST SDK, смотреть какие запросы идут во время формирования динамического контента на сайте и формировать эти запросы ручками (а возможности этих библиотек помогут в этом), довольно гиморно, но это позволит делать проги которые не зависят от того установлен ли браузер в системе
другое дело, что если у сайта уже есть какой-нибудь официальный rest- или soap- бесплатный доступ, то проще воспользоваться им и получать все нужные данные официально
к примеру, в файрфокс сейчас можно писать расширения только на ява-скрипт, но есть возможность коммуникации этого расширения с нативным запущенным приложением при помощи
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging
Допустим, ты написал хедер, в котором есть несколько определений. Если ты захочешь использовать этот хедер при написании других хедеров, а затем несколько таких хедеров заинклудишь в одном файле, то одни и те же определения включатся несколько раз, на что компилятор ругнётся. Чтобы этого избежать, достаточно в начале хедера написать pragma once, и препроцессор будет проверять, включался этот файл уже или нет, и если включался, пропускать.
Также есть другой подход, называется include guards. Более переносимый.
А если какой-то стандартный хедер типа iostream(в нем есть эта директива?) в моем хедере нужен, в основном файле его потом не подключишь?
Подключишь, все библиотеки используют pragma once или include guards. Стандартная библиотека не исключение. По-другому просто невозможно написать хоть сколько-нибудь большой проект.
Из-за этого можно даже написать:
# include <iostream>
# include <iostream>
# include <iostream>
И это соберётся.
Ок, но используется это в целях экономии размера итогового файла, а не для разрешения каких-то конфликтов компиляции?
А, ты выше написал, что при повторении компилятор будет ругаться без этой директивы, я невнимательно прочел.
Вроде теперь понятно, спасибо.
Используется всё только для разрешения конфликтов. На размерах исходников никто не экономит, в этом нет смысла.
>а в самом коде она нигде не появляется.
Она появляется в генерируемом мок файле.
Обращаешься к ней в твоем классе окна как ui->кнопка_нейм
Только не moc, а uic
```
InterfaceReg::InterfaceReg( InstantiateInterfaceFn fn, const char *pName ) : m_pName(pName)
{
m_CreateFn = fn;
m_pNext = s_pInterfaceRegs;
s_pInterfaceRegs = this;
}
```
вот это `: m_pName(pName)` что это такое?
Это, считай, `m_pName=pName;` в теле конструктора первой строчкой до остального кода. Можно туда же ещё дописать m_CreateFn(fn).
Спасибо за разъяснение. Я или не понимаю практического смысла такого написания, или просто говноед так написал...
Можно же просто всё решать на уровне указателей.
https://ideone.com/SZDfbA
Вот этот код нельзя записать без этого угрёбищного синтаксиса с двоеточием. Идея в том, что если B наследуется от A, то объект A должен быть сконструирован строго до любого кода конструктора B. Написать A=124 там не получится.
>не понимаю практического смысла такого написания
Я тоже не понимаю, выглядит отвратительно, особенно когда там пунктов 5-6 после двоеточия и в скобках указать нужно не просто параметры, а какие-то выражения. Например, если в коде выше нужно не просто 124 указать - а получить число из файла и только потом передать его в конструктор A, то придётся всю процедуру получения числа из файла указывать в скобках после двоеточия. То есть придётся по сути написать дополнительную функцию, которая нужна только как вспомогательная для получения бедного числа из файла, чтобы вызов этой функции затолкать в скобку после двоеточия.
Объясняется это тем, что конструкторы имеют другой смысл, и если я хочу из конструктора B прокидывать значение получаемое во время конструктора A - то это должно быть не конструкторами, а функциями инициализации (обычными методами по типу void init(...), где B::init будет получать нужное значение и передавать его в A::init). Использовать конструкторы как предлагаю я не православно, якобы. Но это всё ещё можно сделать через placement new.
Предлагаешь делать на каждый чих new/delete? Дерзай. Только потом не удивляйся, почему перформанс упал до уровня питона.
Наверняка связано с выпуклой оболочкой
Звучит как задача поиска выпуклой оболочки. Но там количество точек не учитывается, а у тебя должен быть именно шестиугольник.
выпуклый шестиугольник,причем наибольший
Не понял задачи.
Найти минимальные и максимальные значения x и y и построить шестиугольник, в который этот квадрат точно поместится, чтобы внутри него были все точки? Но это же бред какой-то, задача не может в этом заключаться. Может быть шестиугольник должен быть минимальной площади?
Или вершинами шестиугольника могут быть только точки из твоего списка? Это никак не следует из твоего описания.
нужно,чтобы в этот шестиугольник входило максимальное количество точек,которое мне дано
если "выпуклых" точек будет 7, а не 6, то твой препод идет нахуй с формулировкой задачи.
если "максимальное количество точек" подразумевает все таки не вообще все точки, то модифицируешь Алгоритм Грэхема https://habr.com/ru/post/144921/ под свои нужды. ну просто находишь все возможные шестиугольники и выбираешь из них самый оптимальный)
Благодарю
Так инициализируют константные члены, и члены без дефолтного конструктора.
А при эксепшене раскрутится стек только для уже созданных членов, при записи через = они сначала создадутся по умолчанию потом переназначатся.
>>48327
Использую смарты там, где без их использования требовалось бы вызывать delete у сырого указателя.
Использую STL (с кастом к Qt типам при востребовании) там, где можно обойтись без Qt. Если же это например список заголовков таблицы, то храню его сразу в QStringList, потому что он используется только в одном месте при передаче Qt-методу, который принимает QStringList.
potomu chto stek ne perepolonilsya
Потому что все ждут, когда кто-то перекатит. Возьми да перекати сам, если хочешь.
Можно, конечно, внутри метода сделать какой-нибудь статик таймер, но не знаю, хорошо ли это.
Быдловариант: проверяй, нет ли в направлении выстрела на определенном расстоянии уже выпущенного снаряда.
Но оба варианта так себе, вроде бы.
>проверяй, нет ли в направлении выстрела на определенном расстоянии уже выпущенного снаряда.
Вот это может и сделаю, звучит неплохо и довольно быстро
Это 100-й тред, давайте его навсегда оставим
>Как это лучше сделать?
ух бля зря ты спросил, там очень сложная концепция для новичка, да и в общем то не нужная для говно-пет-проектов.
дело в том, что ФПС в "высокоразвитых" играх не константа. то есть ты не начинаешь быстрее бегать в майкрафте при 1000фпс, а в тяжелых играх на слабом железе у тебя даже при 20 фпс ну в теории возможно поиграть, это будет слайдшоу, но не замедленная съемка.
дельта подход очень прост, ты прописываешь скорость снаряда в пикселях в секунду, и каждый кадр увеличиваешь позицию снаряда на скорость помноженной на дельта, где дельта - разница времени между предыдущим кадром и текущим. для говнопетпроекта на самом деле и его более чем достаточно, но что делать, если событие должно было произойти именно между кадрами?
ведь если фпс будет скакать как ебанутый(предположим), то и пули будут вылетать не равномерно. я на самом деле не знаю как именно это делают грамотные разработчики игор, но можно предположить, что они тупо интерполируют. вот например как я это вижу: я нажимаю стрелять между кадрами, пуля помещается на условную архитектурную временную шкалу, в параметрах к пуле запоминается параметры дула именно во время нажатия кнопки, в следующий кадр я просто отрисовываю все пули на временной шкале с учетом прошедшего времени. если пуля столкнулась с чем то(наложилась на другой объект), я пытаюсь вычислить когда это произошло, то есть пулю надо отодвинуть немножко назад, так как она может наложиться на объект, и допустим вместо пули запустить анимацию маленького взрыва.
Если скорострельность сильно ниже частоты кадров (у тебя же игровая механика к отрисовке привязана, верно, бака ты такая?), то просто напиши что-то вроде:
reload-=dt;
if (reload<=0 and probel){ vistrel(); reload+=0.2;}
Где dt - время между кадрами, 0.2 - время перезарядки, а vistrel создаёт новый спрайт-снаряд. Это будет не очень хорошо, но зато просто.
Если скорострельность сопоставима с частотой кадров (например, 20 выстрелов в секунду), то нужно анализировать время до перезарядки и время кадра. Например, если у тебя время кадра - 0.1, интервал между выстрелами 0.03, и на начало кадра до перезарядки осталось 0.02, то за этот кадр тебе нужно создать три снаряда. Тот, который создастся в момент 0.02 (и при этом нужно ещё посчитать, что он пролетит 0.08*v, где v-скорость), и ещё два в моменты 0.05 (пролетит 0.05v) и 0.08 (пролетит 0.02v). И на конец кадра время перезарядки будет уже 0.01.
Могу написать демку с обоими способами, правда, только на opengl.
Да, там не reload+=0.2, а просто reload=0.2, иначе будет что-то очень странное происходить, если долго не стрелять. Или reload-=dt занеси под условие (reload>0).
Либо, кстати, просто делай перед выстрелом задержку в полсекунды. Как лайтовое решение - сойдёт.
Решил попробовать привязаться всё таки не к отрисовке, а времени.
Сделал как-то так, но мне кажется, что я опять привязался к времени выполнения и чем быстрее компьютер на котором это запустят, тем меньшим будет интервал между выстрелами.
Кстати а не рискует ли std::chrono::steady_clock::time_point просто выйти за границы?
чел чел чел я все придумал. когда нажимаешь выстрел, создаешь блядский поток, который будет выстреливать и sleep в цикле. когда отпускаешь кнопку - убиваешь поток.
Ебаш тредпул сразу для всей обоймы, хули
Слишком сложно сделано? Я просто хотел потом ко времени ещё подвязать что-то вроде восстановления энергии и может какие-то смены фреймов для врагов, поэтому сделал целый класс. Я думал в chrono довольно легкие функции, способа сделать это легче я не нашёл к сожалению.
не тот скрин приклеился
Пиши враппер под либу.
Ну напиши свой мини-фреймворк, который будет обёртывать нужные тебе либы в одинаковый интерфейс. Частая практика, в том же Я.Такси так делают и не парятся
У меня прямо в главном меню есть пункт "данные" и там можно добавить источники. Типа как на скрине, но тут какая-то другая версия тоже.
пхах, пчел, не желаешь повнедрять зависимости?
640x640, 0:18
https://www.youtube.com/watch?v=6LEULbfGvRo
За все эти годы даже нормальный менеджер зависимостей и нормальную систему сборки не придумали, что уж говорить про соглашения, которым следовали бы все.
C++ - хороший язык, но его экосистема - полное говнище.
Что значит нормальную? Большинство существующих сегодня систем сборки решают какие-то конкретные задачи. Как там с распределенной сборкой? Много из нормальных систем в других языках её поддерживают?
It depends on the language. For example, if the problem is very generic, then we can just use C. We use GCC as a general purpose assembler on Linux. However, if there is no generic problem to solve, then we tend to use the most specific language. For example, if you have a generic problem such as memory allocation, then you'll usually use the most generic language and go to the C language. There is some variation on the theme, however. In C, we tend to use the more general language, and if the problem is very specific like a register overflow, then we'll use an implementation of C and go to C++
The first reason is that it's a very complicated subject. You might be interested in the "Style Guide" that's available from the C++ standards committee, and which is an attempt to standardize things. It's a very thorough thing. But it's not a single code-style standard. The standards committee is a large, complicated, overlapping thing. It's a very complicated problem, and it's very hard to get anything done, unless there's a consensus. If you go to it, you get a whole bunch of stuff, and there's not a lot of consensus.
The second reason is that there's a whole bunch more to the problem than "Style Guidelines", you're looking at many different languages, and you're looking at many different programming styles. There's no standard way of doing things. If you look at any language, there's something else going on, and there's no single standard that will tell you all the things. You just have to learn to look.
I started to study russian language in 2007, I am studying Russian Language. I'm a member of the Linguistic and Cultural Society of Moscow, a committee of researchers and instructors for Russian language. I'm a member of C++ committee, member of ISO and I'm responsible of internationalization for the russian standard. I'm a member of the C++ core committee, a member of committee of research and instructors of Russian Language.
Ask me if you want.
Это паста с 2channel, поцоны, расходимся!
>私はC ++プログラマであり、ロシア語の非公式テキストを理解するためにここで練習しています。 私はC ++コア委員会のメンバーです。C++標準ライブラリであるSTLに貢献し、C ++エディターです。
>2007年にロシア語の勉強を始めました。ロシア語を勉強しています。 私はモスクワの言語文化協会のメンバーであり、ロシア語の研究者とインストラクターの委員会です。 私はC ++委員会のメンバーであり、ISOのメンバーであり、ロシアの標準の国際化を担当しています。 私はC ++コア委員会のメンバー、研究委員会のメンバー、ロシア語のインストラクターです。
>よろしければお願いします。
Yeah, and they do the same thing. It's just different ways to communicate. There are no certain rules of communication, so people can find the right way to convey their message. The way I communicated was the way they did. I was trying to get their point across, but I couldn't do it in this manner. That's what I had to do. But if we just sit here for three hours, and we just sit here like I just sat down with the guy in a movie and have some kind of conversation, we're just going to be confused and we're going to be confused all the time because I'm not communicating in the same way they did.
std::ifstream in("file.txt");
if (in.is_open())
{
while (getline(in, line))
{
Array = std::stoi(line);
i++;
}
}
Как сделать, возможность не указывать расположение текстового файла в коде, а выбирать его через диалоговое окно?
std::ifstream in("file.txt");
if (in.is_open())
{
while (getline(in, line))
{
Array = std::stoi(line);
i++;
}
}
fix
std::ifstream in("file.txt");
if (in.is_open())
{
while (getline(in, line))
{
Array = std::stoi(line);
i++;
}
}
else
{
for (auto itr : lines_iter())
{
if (itr.count() > 0)
{
for (auto itr_str : i)
{
if (std::stoi(itr_str.first).str() == line)
{
std::ifstream itrout(inout, line);
if (itrout.is_open())
{
while (itrout.getline(in, line))
{
Array = std::stoi(line);
i++;
}
}
}
else if (itrout.is_open())
{
while (itrout.getlines(in, line))
{
Array = std::stoi(line);
i++;
}
}
}
}
}
Попробуй этот код
std::ifstream in("file.txt");
if (in.is_open())
{
while (getline(in, line))
{
Array = std::stoi(line);
i++;
}
}
else
{
for (auto itr : lines_iter())
{
if (itr.count() > 0)
{
for (auto itr_str : i)
{
if (std::stoi(itr_str.first).str() == line)
{
std::ifstream itrout(inout, line);
if (itrout.is_open())
{
while (itrout.getline(in, line))
{
Array = std::stoi(line);
i++;
}
}
}
else if (itrout.is_open())
{
while (itrout.getlines(in, line))
{
Array = std::stoi(line);
i++;
}
}
}
}
}
Попробуй этот код
struct S {
float x;
float y;
float f;
}
массив:
S* A = new S[J]
и есть код
for (int j = 0; j < J; j++) {
A[j].x = fmod(rand(),640);
A[j].y = fmod(rand(),320);
A[j].f = generator();
}
Какого-то хуя ровно после 10-ого значения он начинает записывать хуйню, а не то, что его просят. Вместо троек 123 123 533245 он заисывает 123 345345 0 или что-то в этом роде. В чем может быть ошибка?
итераторы i,j,k, например.
Вот рабочий вариант:
struct S {
float x;
float y;
float f;
}
S A = new S[J]
for (int j = 0; j < J; j++) {
A[j].x = fmod(rand(),640);
A[j].y = fmod(rand(),320);
A[j].f = generator();
}
A[0] = 1;
float[] A0 = new float[5]
A1 = new float[]
A2 = new float[]
A3 = new float[]
// Generate a random number between 0 and 2,000,000,000
// The generated random number is the sum of the numbers in A0 + A1 +
// A2 + A3
// Note: The generated random number is always between 0 and 2,000,000,000
// The generated random number is the absolute difference of
// the numbers in A0 + A1 + A2 + A3
for (int x = 0; x < 5; x = rand() 2, 0) { // Note: If x == 2,000,000,000 this is the same as 0, 0
A0[x] = 0;
A0[x + 1] = 0; // Note: If x == 2,000,000,000 this is the same as 0, 0
A0[x + 2] = 0;
}
for (int j = 0; j < 5; j = rand() 2, j++) {
for (int x = 0; x < 5; x = rand() 2, x++) {
A0[x] = fmod(A0[x] A0[x + 1], 0);
// Note: We add 1 because we know x has to be a multiple of 2.
// The generated random number is the absolute difference of
// the numbers in A0[x] and A0[x] + A0[x + 1]
A0[x] += A0[x + 1] A0[x] - A0[x];
Там только вывести осталось
Вот рабочий вариант:
struct S {
float x;
float y;
float f;
}
S A = new S[J]
for (int j = 0; j < J; j++) {
A[j].x = fmod(rand(),640);
A[j].y = fmod(rand(),320);
A[j].f = generator();
}
A[0] = 1;
float[] A0 = new float[5]
A1 = new float[]
A2 = new float[]
A3 = new float[]
// Generate a random number between 0 and 2,000,000,000
// The generated random number is the sum of the numbers in A0 + A1 +
// A2 + A3
// Note: The generated random number is always between 0 and 2,000,000,000
// The generated random number is the absolute difference of
// the numbers in A0 + A1 + A2 + A3
for (int x = 0; x < 5; x = rand() 2, 0) { // Note: If x == 2,000,000,000 this is the same as 0, 0
A0[x] = 0;
A0[x + 1] = 0; // Note: If x == 2,000,000,000 this is the same as 0, 0
A0[x + 2] = 0;
}
for (int j = 0; j < 5; j = rand() 2, j++) {
for (int x = 0; x < 5; x = rand() 2, x++) {
A0[x] = fmod(A0[x] A0[x + 1], 0);
// Note: We add 1 because we know x has to be a multiple of 2.
// The generated random number is the absolute difference of
// the numbers in A0[x] and A0[x] + A0[x + 1]
A0[x] += A0[x + 1] A0[x] - A0[x];
Там только вывести осталось
Ты еблан? Я ему помог
На базаре будешь так общаться блять
Заочная второкурсота информатики, учу теовер и статистику, а по крестам че-то тухло - препод древний деда, который дает какие-то странные изи задания на семестр. Что-то типа найти минимальный элемент массива, лул.
Единогласно. Skillbox - хуйня, развод и говно. Если ты тупой даун, который этого не понимает, можешь попробовать конечно. Но потом не жалуйся, когда попадешь в пучину анальной безысходности
принято, спасибо, пойду старого пердуран на задачи трясти.
1. https://wandbox.org/permlink/E9yTL78tkWY6opje
Ты из js перекатываешься чтоль? У нас такой хуйни нельзя творить.
тому що инт, а остальное - лямбды
g++ main.cpp header.h json.hpp curl/curl.h curl/curlver.h тут еще несколько файлов curl -o test
Насколько я понимаю, файлы компилируются не вместе, но как сделать правильно я не знаю.
Не нужно указывать 100500 файлов, хватит -Iпуть_к_хедерам -Lпуть_к_либам -lназвание_файла_с_либой.
Если что, -I - заглавная i, а -l - строчная L. Ненавижу пидораса, который это придумал
https://ru.coursera.org/specializations/c-plus-plus-modern-development
вот курс для новичков хороший платный
https://stepik.org/course/7
https://stepik.org/course/3206
этот курс более старый, но он тоже неплохой и бесплатный
о и давно программисты перекат тредов автоматизировали? мое увожение
>cmake лучше изучай
Он не понимает, как компилятор запускать, что такое объектный файл, как инклуды работают, а ты ему сразу cmake советуешь.
Сurl needs the full headers to compile your c++ project
It is a good idea to add header files to your project (with a few exceptions, you can add only the header files). However, it does not mean that your project is compile-able. The header files don't include the libraries, and the only exception is header files that contain only library headers. The reason is that they contain only libraries definitions (including headers) and headers from the external sources are included, the external sources are not defined in the .h files. The other exceptions are: The header files in the same directory, the headers of external source files and the headers of libraries (including headers).
Ну так таам документация есть, как раз все поймет, мне просто больше дедуктивный метод познания заходит а не индуктивный
Ctrl+Space при курсоре в скобках? Там отображаются даже неявный конструктор копирования.
Они в новых версиях иконку F1 выпили уже наконец?
ок, ты нашел многочлен первой степени для одного значения, одного квадратика. Но в каждом квадратике несколько значений, а самих квадратиков 9 штук.
>Ненавижу пидораса, который это придумал
for (int I=0; I<11; ++I)
for (int l=0; l<I; ++I)
Есть шрифты, где ещё и 1 похожа на l. А иногда 1 из одного шрифта выглядит как l из другого и наоборот.
пойти нахуй со своей лабой?
>Ненавижу пидораса, который это придумал
Когда это придумывали, каждый байтик был на счету, короткие тэги реально экономили место. Плюс l и I в тех шрифтах в терминалах отличались очень сильно, и никто не думал, что дизайн шрифта когда-нибудь станет проблемой.
квадратики как должны между собой взаимодействовать?
>вот те картинка, нужна одна функция, которая все это интерполирует
Если хватит линейной интерполяции, то можешь сначала строить выпуклый многоугольник через триангуляцию Делоне (его еще надо будет экстраполировать до краев твоей решетки), а потом смотреть в какой треугольник попадает узел решетки, и получать его значение через барицентрические координаты.
https://en.wikipedia.org/wiki/Delaunay_triangulation
https://en.wikipedia.org/wiki/Barycentric_coordinate_system
задачу нормально напиши ало бля
Это тот, который вместе с новым виндовым терминалом продвигают
Ну так ты почитай то, что там вместо шапки. А потом можешь в настройках браузера можешь выбрать какой шрифт использовать для моноширинного текста.
> это легаси до сих пор доминирует
Потому что никто системы сборки и миллионы скриптов ради одного хипстера переписывать не будет.
>'m a member of C++ committee, member of ISO and I'm responsible of internationalization for the russian standard
Сделайте stod/to_string, в которых явно можно задавать сепаратор, точка или запятая, без настроек локали. Это действительно нужная вещь. Полезнее 2d графики в стандарте, как мне кажется.
>Так почему сейчас, когда шрифты весят десятки мегабайт с чуть ли не всем юникодом
Кстати, вопрос: почему сейчас код весит десятки мегабайт. Я понимаю, что инлайн и 64-бита, но, например, у Qt за десять лет бинарники распухли в 10 раз без серьезного увеличения функционала (при этом 32 и 64 бита отличаются по размеру процентов на 30). Os нифига не помогает. Я хочу экзешники на 500 килобайт, как на дельфи, а не 20 мегабайт ради одной формочки.
>При чём тут системы сборки и скрипты? Вроде, речь про щрефты.
Ему не нравится -l в параметрах компилятора, потому что похоже на -I.
>Пиши на сишечке
Там такая же фигня. GTK сейчас не меньше Qt весит. Потому что flto, и компиляторы дофига умные.
Как раз параметры гцц меня полностью устраивают, они логичные. Я негодую из-за шрифтов.
Я вообще про бинарники и библиотеки, которые с каждым годом пухнут, как на еде из макдака, без серьезного улучшения функционала.
>Я негодую из-за шрифтов.
Реальная проблема со шрифтами - это то, что почти нигде ` и ' нельзя использовать как парные кавычки. Даже в шрифтах "для программистов" вроде Terminus.
Тут дело не в шрифтах, а в том, что лексеры многих языков так научены искать строки. Лексеру пох, как выглядит символ, он думает числовыми кодами символов. И для него они разные.
>Тут дело не в шрифтах
В шрифтах и клавиатурах. Раньше в шрифтах можно было делать `такие кавычки', и это выглядело нормально, потому что у этих символов было парное начертание. В старой юниксовой документации это повсеместно используется. Теперь в юникоде добавили кучу символов для одинарных кавычек, но специальную раскладку ради них никто использовать не станет, и на клавиатуры лишних символов не добавят. Это и бесит: почему в кодерских шрифтах не сделать парными как раньше, и забить на правильную типографию, на которую все равно всем пофиг в этой области?
>Сделайте stod/to_string, в которых явно можно задавать сепаратор, точка или запятая, без настроек локали.
напиши сам то, блядь
не долго и писать
вот
>>45733
Я так и не разобрался с траблой. vcpkg скачал, либы получил.
Никак не могу победить эту студию. Пожалуйста, памагити.
Ну допустим у меня есть линейные многочлены для каждого треугольника. А дальше что с ними делать?
>Ну допустим у меня есть линейные многочлены для каждого треугольника.
Если есть треугольники, то многочлены не нужны. Переводишь декартовы координаты точки в барицентрические по формуле из вики, потом находишь значение в точке = As+Bt+C*u, где A, B, C - значения в вершинах треугольника, s,t,u - соответствующие барицентрические координаты.
>напиши сам то
Я-то написал уже давно. Это в стандарте должно быть, потому что абсолютно все за пределами англоязычного мира на этом спотыкаются хоть раз.
Куда ты их получил блядь?
vcpkg integrate install прописывал? Что у тебя в настройках линковки творится?
>Может научить stoi/atio возвращать optional вместо хуй пойми чего?
Да, эксепшены для таких вещей - не очень хорошее решение.
#pragma data_seg(".sec")
__declspec(allocate(".sec")) unsigned char buffer[size];
#pragma data_seg()
Работает, но если включить оптимизацию, то очевидно компилятор оптимизирует этот хак. Как это делается по канону?
Алсо, пилите перекат.
Алсо, оптимизирует скорее всего линковщик из-за LTO, хз как это отключить для одного файла
LTO наверное можно в параметрах файла вырубить (если ты студией пользуешься).
Post-build step указать можно в настройках проекта, там будет что-то типа создания раржипега
> button1 = new QPushButton("Button", this);
Но проблема в том, что кнопка не активна. Хотя если создать кнопку отдельно
> QPushButton sd("df",&w);
Где w экземпляр класса, всё будет работать. Почему?
>fatal error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден
инкрементную компоновку отключил, но ошибка осталась. Что это за хуйня?
> я создал проект в 10 студии
А открываешь небось в более новой, либо более новая вообще установлена на пеке.
> fatal error LNK1123: сбой при преобразовании в COFF. Что это за хуйня?
У меня эта хуйня проявлялась при компиляции ресурсов. Для начала можешь все ресурсы (иконка/инфо о версии) удалить из проекта и попробовать пересобрать. А так, чтобы с ресурсами компилировать нужен какой-то апдейт на 10-ю студию. Какой - не помню.
По факту более новые студии меняют какую-то нужную либу и 10-я студия обсирается. Как вариант можно эту либу взять с машины, где нет студий новее 10-й и положить её рядом с компилятором. Что за либа опять таки запамятовал.
А вообще нахуй тебе десятая студия вообще. Бери новые или вообще QtCreator.
>А открываешь небось в более новой
В 10 и открываю. Никаких студий новее я не ставил, 10 поставил из-за того, что мой ноут 17 или 19 не потянет.
>17 или 19 не потянет
Ты практик или теоретик, ты пробовал?
У меня тоже достаточно динозаврический ноут(что дома, что на работе), но полет нормальный с обеими версиями.
Теоретик, значит. Как хочешь.
Как я помню, десятая-двенадцатая сами по себе лагучие. Мне сначала поставили на удаленной машине 12 - она работала хуже, чем 17/19, которые я ставил сам.
Прописал. Проект скомпилился.
Анон, спасибо большое.
В приложении 2 и 3 два скрина. Я в душе не ебу что это значит. Просто напихал путей куда мог. Как эта хуйня вобще работает? Где можно прочитать инструкцию как добавлять библиотеку? Так чтобы по пунктам, с обкашлянными моментиками всеми.
Я буквально не понимаю что я сделал.
Тебе ничего не нужно руками добавлять, если ты прописал vcpkg integrate install
По поводу подключения библиотек ты хуй где инфу найдёшь. Нужно только уяснить, что со стороны библиотека - это по сути набор заголовков и, опционально, lib(+DLL если линковка динамическая). То есть всё, что тебе нужно, это
а) указать пути к заголовкам
б) прописать названия .lib файлов
в) чтобы не писать каждый раз путь к lib файлу можно указать путь к папке с этими файлами.
г) если линкуешься динамически, то нужно не забыть DLL положить рядом со своей приложухой/библиотекой(DLL)
В студии для пункта "а" это твой пикрил 2 либо пути в пункте выше (каталоги vc++ блядь, какой же уёбищный русский перевод у студии, пиздец просто).
Для пункта "б" это твой пикрил 3, для пункта "в" это пункт выше (или нет, не ебу как оно там на русском называется)
DLL если планируешь запускать без студии копируешь руками либо скриптом самописным, хотя если в студии не прописаны пути до бинарников, то тоже придётся так делать.
Конечно, это всё при условии того, что библиотека написана нормально (в vcpkg все библиотеки приводят к нормальному виду).
На какой, качать 2017 или 2019 ояебу как долго.
Мне это надо собрать, всё, столько ебли из-за этого, ор выше гор, понятное дело, что проще поставить 2017 или 2019 и не мучать себя, но у меня йобта, а качать надо от 10 ГБ.
Нихуя ты охуел, 500 килобайт на бинарник! Распухшая делфи. Я хочу чтобы вообще весь гуй влезал в 30КБ, как GEOS DESK TOP на коммодоре 64, с контролами, менюшками, окошками, иконками и всем-всем-всем.
Да давай тут останемся, 100й тред как никак
Пиздец. Ты ниасилил утилиту с тремя кнопками?
спасибо, на курсере подал заявку на матпомощь
constexpr char null_char = '\0';
есть token.h и token.cpp, в которых используется null_char. Если я пишу в token.h
extern char null_char;
main.cpp(8,16): error C2373: 'null_char': redefinition; different type modifiers
если ничего не пишу в token.h
token.h(22,16): error C2065: 'null_char': undeclared identifier
token.h(22,16): error C2065: 'null_char': undeclared identifier
token.cpp(11,12): error C2065: 'null_char': undeclared identifier
Как сделать, чтобы одно и то же constepr использовать в разных файлах?
MS Visual Studio 2019 Community
extern это не для компл тайм переменных
ты вообще читал, что такое constexpr?
Но это же тебе надо обратиться в делфи/паскаль тред.
Код процедуры пункта Г будет меньше чем на 10 строк (может быть даже 5 строк), и написать его можно секунд за 30. Просто смешно предлагать за такое денежку. Я бы написал, если бы у меня был настроенный компилятор под рукой - нужно потыкать функции, там какая-то контринтуитивная эбола была со строками, если не ошибаюсь.
А, ты в плане что тред старый? А я то думаю в чём же дело.
А я и не заметил, их тут перекатывают раз в год, и нет в треде сообщения о перекате обычно.
Автор гуманитарий, мало понимающий в двоичном коде (это как минимум)
Вы видите копию треда, сохраненную 18 января 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.