>>1263371 Если знаешь си, то есть упрощённое объяснение: виртуальные методы для класса хранятся в специальной структуре с указателями на функции (vtable), которая одна на класс. То есть функция вызывается не напрямую, а косвенно. Это позволяет делать такую штуку, как полиморфизм.
>>1263368 (OP) Привет аноны. На связи кун 19 лет. Учу c# из-за unity и для запасного плана, если придется вкатываться во что-то серьезное учу c++. Первое время охреневал от синтаксиса c++ и как он разница с с#, но со временем свыкся ибо похожи, как по мне.
Скоро окончу шарагу и пойду учится на информационную инженерию из-за того что нравятся реализовать идеи или мысли в "реальные" объекты, сущности, почти чувствовать себя богом. Из-за этого начал изучать unity, а потом и c++.
Хотел спросить: Стоит ли выкатываться из уютного c# в жестокий с++.
Даст ли мне высшее образование то что я не смогу получить, выучить?
И стоит с моими фантазиями выбрать именно этот факультет.
Ещё хотел спросить зачем писать std::cout если можно объявить namespace std? Это просто как один из примеров.
И хотел спросить где я обосрался и как скоро мои фантазии о программировании превратятся в крах. И какое будущее ждет с++ и может с#
Хотелось бы ещё получить пару советов для начинающего.
>>1263704 > Стоит ли выкатываться из уютного c# в жестокий с++ Надо делать то, что тебе нравится. И шарп и кресты востребованы на рынке.
> Даст ли мне высшее образование то что я не смогу получить, выучить? Высшее образование - трата времени. Получать придется, если хочешь сьебать с РФии, но знаний оно никаких не даст. Исключение МГУ- МГТУ и прочие топ вузы.
> И какое будущее ждет с++ и может с# C++ точно ждет светлое будущее, про шарп не заню, но Майки его точно не бросят.
> Хотелось бы ещё получить пару советов для начинающего. Учи английский язык, ежедневно программируй, читай книги, смотри конференции, не читай треды неудачников а-ля "МЫ ВАМ ПИРИЗВОНИМ", попробуй попасть в Яндекс на старте карьеры, очень многому научишься.
>>1263725 >C++ точно ждет светлое будущее Если из него всё легаси говно вычистят и сократят язык до смысла, то может и ждёт. Ну а пока c++ лишь теряет свои ниши.
>>1263725 >Высшее образование - трата времени. Получать придется, если хочешь сьебать с РФии, но знаний оно никаких не даст. Исключение МГУ- МГТУ и прочие топ вузы.
А можно вот тут поподробнее?
Сам недоучился. Уже 7 лет как работаю недопрогроммистом 1С, в котором знаю достаточно много. При этом хоть в каждой вакансии и пишут высшее/неоконченное, но в большинстве контор, думаю, на это не смотрят. Только в гос конторах. Так вот знаю в 1С достаточно много, поэтому считаю что для поиска работы мне хватит опыта вместо корочки.
Суть в том что 1С заебал и хочу перекатиться в С++. Вариантов устроиться стажером без вышки, видимо, еще меньше
>>1263744 У меня нигде вышку не спрашивали, кроме командировки в Швецию. Т.е. мне пригодилась - большей части людей точно не пригодится.
Если сомневаешься - найди дистанционное обучение в любом гос-вузе (я закончил такую хуйню в СибГУТИ), и просто плати профессиональным делателям заданий и потом купи любой диплом.
>>1263755 думал об этом раньше. Но потом понял что в 1С я и так устроюсь благодаря опыту. А если пойду в С++ это будет такой даунгрейд по ЗП что не до этого будет
>>1263784 Именно из-за этого и хочу съебать. Ну и по зп уже потолок близко, хоть и ДС. Собственно, я это знал еще до того как увидел 1с,так как изучал с++ ещё со школы. Но надо было куда то устраиваться работать, стажёром с++ тогда не нашел вакансию. Может плохо и мало искал. Думал, посижу пол годика поизучаю с++. Но было слишком много нового по работе, стало не до этого. Так прошло 7 лет. Думаю, если написать в резюме "работал в 1с 7 лет" так же и скажут как ты написал
>>1263972 На пюсах то? Можешь показать рабочий код. Вообще меня очень интересует как происходит разработка такая реальная на плюсах. Как объединяется код разных разработчиков и тд. На плюсах видел только или свой код иди движки quake doom3.
А объединять можно по разному. Есть такая штука как CGI(Common Gateway Interface). Её обычно юзают когда пишут прошивки для всяких роутеров или других похожих девайсов в с веб интерфейсом. А в самом интернете считается устаревшей.
Можно вызывать написанную на крестах библиотеку из node.js
>>1263368 (OP) Возникли вопросы насчет русского языка в консоли. 1) Что конкретно делает setlocale? 2) Понял, что кодировка файла с кодом должна совпадать с кодировкой консоли, поэтому использовал SetConsoleOutputCP() и SetConsoleCP(). Попытался установить значение 65001, сохранив файл в кодировке UTF-8. Вывод работал, а вот ввод — нет. Почему? 3) Следует ли мне, исходя из предыдущего пункта, сохранять код в стандартной кодировке консоли Windows (866), или я все же могу сохранить файл в кодировке UTF-8, а в консоли использовать другую кодировку? Как-то хуево сформулировал вопросы =/
>>1264051 Хочешь ебаться с указателями, разберись с Си. Поймешь что ебаться с ними совершенно ненужно. Впрочем, если очень хочется ебаться с указателями, волшебный мир unsafe & undefined behaviour ждет тебя.
Современные кресты пытаются сделать все, чтобы ты с этими самым хуятелями не соприкасался.
>>1264050 Cargo, насколько я помню, предполагает систему проектов. Не люблю такое. Мне больше нравится gcc файл1 файл2 файл3 -o вывод -разные -параметры, чем cargo соберимнепроектплеес.
>>1264056 Тебе никто не запрещает ебаться с > rustc файл1 Просто это настолько глупо в 2018 > cargo new fuck > cd fuck > cargo run Это работает настолько просто и прозрачно (просто открой Cargo.toml), что совершенно неясно почему можно хотеть делать то же самое руками.
>>1264059 Я хочу поебаться с этим как минимум для того, чтобы понять, как это работает, а не надеяться на то, что cargo сделает все за меня. Понятно, что если ты работаешь над большим проектом, лучше использовать подобное упрощение, которое организовывает проект за тебя. Но нельзя, обучаясь программированию, пропускать такие моменты, в этом нужно обязательно разобраться, по-моему. Передо мной не стоит цели научиться работать с огромными проектами, чтобы потом зарабатывать 300кк в секунду. Я хочу понять все тонкости C/C++, в том числе и указатели, которые, как ты сказал, сейчас практически не используются.
>>1264068 Так я не спорю с тем, что с rust можно ебаться таким же раком. Я это к тому, что твое > Просто это настолько глупо в 2018 это не совсем верно, если речь идет об обучении. Я много хорошего слышал про Rust, но разобраться хочу с проверенным временем C++.
>>1263986 Мне вот еще интересно, как разрабатывают на с++ под всякое железо, микропроцы и прочее? Я понимаю под винду или линух, там есть свой компилятор, свои библиотеки. А как это там?
>>1264113 Ничего криминального, вроде. Но и ничего особенного. Обычная методичка усть-пиздюйского института. conio.h, _getch(), как в консоли кириллицей в винде писать и прочие очень важные вещи.
>>1264113 Выглядит как методичка для уроков по информатике в обычной церковно-приходской школе. Код для вычислений всяких выражений написан по принципу: как написана формула так и в коде наваляем (один и тот же sin/cos вычисляется по много раз, куча лишних операций умножения/деления, которые легко заменяются константами).
>>1264121 Если тебе кажется что в усть-залупинский вуз станут впихивать 22 миллиона, то сочувствую. > > педагогический университет Это не значит что там учителей информатики готовят. Не будь дебилом.
>>1264126 >Выглядит как методичка для уроков по информатике в обычной церковно-приходской школе. >>1264139 >Впрочем, с тем, что методичка для цирково-приходской школы я на 100% согласен.
//QT Анон, а как правильно завершать работу программы при событии выключения пеки, если у меня QT? Я ловлю WM_QUERYENDSESSION при помощи nativeEventFilter, отвечаю false и начинаю корректное завершение программы Затем по логам идёт всё нормально, за исключением того что WM_QUERYENDSESSION мне больше не приходит. Но приходит WM_ENDSESSION, которому я тоже отвечаю false и пытаюсь завершиться. Чяднт? Почему у меня не отвечается false? В QT это как-то нужно по другому обрабатывать?
Перешёл на 3 курс, думал, что углублюсь в pythton и машинное обучение, но препод по численным методам так не считает. Есть необходимость строить графики на c++ (заставили в универе, да). Каким способом это быстрей и удобней всего сделать? Использовать окошки обязательно?
>>1264182 А, нет, не понял >bool QAbstractNativeEventFilter::nativeEventFilter(const QByteArray &eventType, void message, long result) >On Windows, eventType is set to "windows_generic_MSG" for messages sent to toplevel windows, and "windows_dispatcher_MSG" for system-wide messages such as messages from a registered hot key. In both cases, the message can be casted to a MSG pointer. The result pointer is only used on Windows, and corresponds to the LRESULT pointer. Пишу *res = false; фейл
>>1263725 > В яндекс А если попробовать в Сбербанк или похожие структуры? Им вроде нужны молодые умы. кроме Тинькофф. Просто для меня репутация Яндекса не очень
>>1264222 Я в душе ниибу, что такое репутация-для-тебя. А вот научиться в яндексе работать над сложными проектами и получить отличную запись в резюме - это клево.
нужно вывести несколько строк в файл. после каждой веведеной строки делать переход на новую строку. но не делать после последней. сечас я просто пробегаюсь фором по вектору строк и ставлю перенос троки после каждой. как в ofstream запретить ввывод временно. удалить последний напечатаный символ. и только после этого смыть все символы из буфера в файл?
>>1264448 > The text is stored in an augmented binary search tree, one glyph per node.
Небро, глиф — это графическое изображение буков. Одна и та же буква A может изображаться разными глифами, в зависимости от текущего шрифта. Ты точно глифы хранишь?
Ну я про код я уже не буду писать. Он не менее безграмотно написан, чем ридми.
>>1263368 (OP) Пишу на плюсах высоконагруженные системы, поставил сервак, закодил бекенд для своего вуза. Впендярил неплохую туда еще верстку. Мне предлагают оставаться после магистратуры и учить недостудентов. Стоит ли?
Написал уже 4-5 клиентов двача, все летают как шустренькие, думаю выезжать из деревни и стремиться в большие города. Что скажете?
Мне нужно передавать данные из структуры в мейн, из мейна в функцию просто так надо. На 37ой строчке нереализуемая передача массива в функцию. Я так понимаю, что это можно сделать с помощью указателя, но не въебываю - как.
У меня андройд, а не сайты. Изучать спринг хуинг и прочее говно оставляю легаси рабам. Вообще думаю закончить пару проектов писать и начать перебираться на иос.
>>1265013 Ну я думаю, что если ты останешься то в профессиональном плане будешь развиваться лучше чем в ДСе в каком-нибудь интерпрайзе. Только помни одно, как сказал один человек, либо ты преподаёшь, либо кодишь, иного не дано. Так что хлопочи себе место лаборанта и развивайся как прогер+матем.
>>1265201 >Что тут происходит? Кто-то установил на твой компьютер самый хуёвый шрифт во всём интернете а также библиотеку для функционального пердолинга.
Доброго всем дня. Я понимаю, но хочу уточнить у опытных спецов. (♦ означает звёздочку, она тут не печатается) Вот смотрите, есть у нас вектор std::vector<T> v(15); После такого объявления v.size() вернет 15, а v.capacity() вернет >= 15. Допустим, мы его чем-то заполнили и замутили пару итераторов auto iter_a = v.begin(); auto iter_b = v.end()-5; А еще сделали пару указателей T♦ ptr_a = &v[0]; T♦ ptr_b = &v[10];
Теперь допустим, начинается реаллокация. И отсюда несколько вариантов, что бывает. — Первый. Я пишу v.resize(20); Оба итератора и оба указателя могут инвалидироваться. То есть, возможно там подряд и была память на увеличение вектора, но полагаться на это — UB и вообще нельзя. — Второй. Я пишу v.resize(10); iter_a и ptr_a остаются гарантированно валидными, а iter_b и ptr_b инвалидизируются. — Третий. Я пишу v.reserve(20); По сути происходит то же, что и в первом варианте. Возможно, вектор реаллоцируется и элементы всем цыганским табором переезжают на новое место. Депеши по старым адресам идут в никуда. — Четвертый. Я пишу v.reserve(4); Это меньше исходного размера и ничего не происходит. Указатели с итераторами остаются рабочими, соответственно. — Джокер. Перед заполнением вектора вызвали v.reserve(20), тогда все вышеизложенные варианты сохраняют валидными оба итератора и оба указателя.
Аноны прочитав про с++. Я понял, что он не прощает ошибок, требует выбор оптимального подхода к реализации проекта, нужно трястись за каждый байт памяти, думать трижды чем делать, заранее планировать всю архитектуру. Но в этом и вся прелесть языка, что она учить тебя правильному техническому мышлению или я где-то обосрался?
>>1265648 он учит тебя думать о ненужных вещах, деталях. в большинстве случаев этот язык является не выбором, а необходимостью. С является таковым еще больше
>>1265648 Не совсем так. Оптимального подхода никто не требует. Можешь хоть пузырьком сортировать и ебашить четырехэтажные иерархии виртуального наследования.
>>1265648 Это выебщики пиздят. На стл, бусте и умных поинтерах можно не менее безопасно чем на жабе писать. И все равно быстрее будет. Но вот если решил прям супер оптимально написать, тогда можно и сегфолт в ебло словить и дедлок итд.
>>1265655 Если есть голова на плечах и желание двигаться дальше, ты будешь изучать инструментарий c++ и охуевать от его разнообразия, но разобравшись ты уже будешь подходить к разной реализации с лучшей точки, которую предлагает с++
>>1265703 Тебе интерфейс или реализацию надо наследовать? Если интерфейс, то выделяйте его в абстрактные классы, если реализацию, то используй композицию
>>1265704 Нужно наследовать интерфейс, но я не очень понял что ты имеешь ввиду. Что значит "выделяйте его в абстрактные классы"? У меня и так Pipeline, GraphicsPipeline, ComputePipeline - абстрактные, а те что с DX_ - их реализуют.
Просматривал давеча хехе.ру. Искал там вакнсии для июней. В итоге выяснил, что для java, c#, php, python, js июней вакансий в достатке, а для c/c++ вакансий раза в три меньше и зп по ним на 20% меньше. Источник исследований конечно сомнительный, но данные с него выглядят как продолжение скатывания c++ в говно.
Гутен морген, бреш-компания. Мне тут рекомендуют книжку Джефф Элджер. C++: Библиотека программиста. Говорят, это основной учебник по продвинутому освоению языка C++. В шапке треда не нашел. Что скажете?
>>1266100 > Списки полезны если много вставок в середине, дек - если с краев. Это написано в любой книжке/туторе про них. Я имею ввиду реальное применение в своих программах. Как, например, элемент какой-то другой структуры данных.
>>1266103 Ну вот я недавно делал кеширующий провайдер данных, был список указателей на структуры их описывающие, при обращении к ним они переносились в начало списка, при нехватке памяти удалялись с конца. Дек вроде нигде не использовал. Но для быстродействия на самом очень часто все делаю тупо на векторах, пусть даже в ущерб потребления памяти.
Да и в целом про deduction guides хотелось бы больше инфы на русском, объясняющей тонкости (а не сухое изложение с cppreference) ну или на английском но попроще (какое нибудь how to)
На собеседовании дали мне задачу. Есть вектор интов, удалить из него все нули. Я сделал это с помощью цикла, в котором использовал erase(). Сказали, всё правильно, только erase() должен вызываться 1 раз. Ещё одногруппница подсказала, что это делается с помощью erase() и remove(). Неподскажите ли оптимальный алгоритм?
>>1266512 remove_if сдвигает все элементы, на которых предикат возвращает false в начало и возвращает итератор указывающий на начало последовательности элементов, возврающих true
>>1266410 > 2k18 > смотреть что-то кроме cppcon/boostcon, особенно руснявые недоконференции
Продажа своего софта. C++ BuilderАноним19/09/18 Срд 15:32:29#168№1266595
>>1263368 (OP) Добрый день, господа программеры. Я написал небольшую утилиту, используя C++ Builder, и хочу начать её распространять за бабосики. При этом моя IDE, как это полагается, спирачена. Так вот, если я преобрету лицензию, с какими трудностями я столкнусь при попытке распространения моего софта? Я об этом только начал задумываться и пока не знаю в какую сторону копать. Что лучше изучить в таком случае? Что там с авторскими правами и так далее?
>>1266595 ну вродь у билдера дорогая лицензия. Хотя вроде выпустили какую-то версию билдера, аналог visual studio community edition, которая свободная и пиратить не надо, посмотри, можно ли твой проект перенести на него, авось проще будет.
>>1266623 Да, слышал про неё. Как бы не оказалось, что она как в бесплатном Qt не собирает dll-ки. Ну а вообще, мне не обязательно нужна последняч версия. Я вообще свою на 2010-м написал, не думаю, что дороже 100к рублей выйдет. Такую сумму я более-менее смогу скопить. Просто, читал про лицензию Qt и там же месячная подписка идет. Так вот, если ты, например, за месяц подписки выдвинул в продажу продукт, то придется оформлять лиценщию на всё последующее время продаж. Поэтому и спросил про билдер, мало ли кто имел дело с распространением своего софта, сделанного на нём.
>>1266641 > Не поздно ли я начал вкатываться? Нет. Сам я вкатился в плюсы после C в 24 или 25. Через год открыл для себя стандарт. Через полгода-год начал фиксить там баги, в том числе не-editorial. ХЗ кто там про 10 лет пишет на то, чтоб выучить C++..
>>1266637 свои длл ты сколько угодно можешь собирать, другое дело Qt и вроде как OpenSource версия наоборот, обязывает тащить все с их dll и их динамической линковкой.
>>1266093 >списки (любые) или дек? У меня ECS на велосипедном деке. Память под элементы выделяется страницами, которые хранятся в списке. Доступ к элементам по указателю, итерация по страницам. При удалении на место элемента заносится последний в деке. У каждого элемента есть айди, по которому можно найти элемент через таблицу. При перемещении элемента (на место удаленного), меняется указатель в таблице. При доступе по указателю сравниваются айди полученного элемента с айди хранящимся в ссылке, если они отличаются, то элемент ищется через таблицу, а указатель в ссылке обновляется. Получается быстрее и удобнее, чем иерархии классов с наследованием колеса от машины.
>>1266839 >char a = ' 1 ' В данном случае у тебя 1 - символ. ASCII-код которого равен 49. Вот это значение и хранится в char a. Когда ты приводишь эту переменную к int, то ничего не поменяется толком (разве что она после этого станет 4-байтовой и ты сможешь сохранять в ней значения намного больше, чем 127 при char). Если ты хочешь исправить свой код, то убери кавычки с 1 (ну и можешь выкинуть приведение к int, хотя и с ним будет работать).
>>1267119 > Походу это можно сделать через int dladdr(void addr, Dl_info info); Я делал именно так, но не знаю, подойдёт ли это под твоё > без трюков с глобальными функциями void °init() { DL_info d; dladdr((void °)init, &d); return new object(d.dli_fname); }
Ананас, такой вопрос. Как часто ты юзаешь функции из algorithm? Я имею ввиду find и все прочие. Допустим есть пара или триплет в векторе и надо найти/изменить какое-то значение и тп. С одной стороны для простоты хватит и цикла (тем более данных не так много), а с другой хороший тон и всё такое.
>QtCreator Стоит вместе с cmake, как сделать портабл проект? Вот чтобы можно было папку перенести в любое другое место и не править пути вручную в CMakeLists.txt.user Если я заменяю их на относительные, он при сохранении всё-равно заменяет их на абсолютные. Нашёл упоминания про CMAKE_USE_RELATIVE_PATHS, но оно больше не работает по каким-то идейным соображениям.
Это дико неудобно, я часто перетаскиваю код между двумя компьютерами и не знаю как это нормально организовать. Хоть пиши скрипт на питоне, который нужно будет запускать после каждого переноса для фикса путей.
>>1267725 К какой библиотеке, причём тут библиотеки? Вот у меня есть мой новый проект из одного файла на три строчки. Сейчас он на диске W и он записал абсолютные пути в свои внутренние файлы. Я переношу его на другой компьютер на диск D, а он всё-равно создаёт каталог сборки на местном диске W, хотя там он вообще никакого отношения не имеет к кодингу. В результате код и ексешники на разных дисках.
А всё что мне нужно, чтобы оно собирало проект в той же папке, где находится и CMakeLists.txt Прописывать в конфиг не W:/code/graph/unknown, а что-то вроде ../unknown или ./unknown
>>1267406 С парой ясен пень find или find_if прокатит. А вот с триплет (это же ты tuple имеешь в виду) даже и не знаю как организовать. Там же нужно std::get<N>(dopustim_triplet) и тогда это всё заворачивается в for от i = 0 до size и что-то с этим делать, выходит, лямбду в теле фора писать или делать функтор или функцию, короче, громоздкое что-то. Никогда их не использовал.
Кто в треде может назвать пример использования массива кортежей на практике?
>>1267743 > А вот с триплет (это же ты tuple имеешь в виду) Ну можно и через тапл, но я имел ввиду struct triple{ T first; U second; W thrid; } шаблонную йобу в начале опустил>
>>1267757 Как вообще вкатиться в CMake? Я вот пробовал в точности повторить за https://cmake.org/cmake-tutorial/ но то ли у меня синдром Патау, то-ли еще в чем проблема, но не заработало. Беда в том, что туториал ничего не показывает минимально рабочего а сразу громоздит кучу непонятной херни, в конце говорит мол, вуаля работает, а оно нихера не работает и ебись потом сам с кучей непонятной шляпы. Что делать? Есть пошаговые гайды какие?
>>1267778 Я искал простенькие проекты на гитхабе уровня лаба1 с несколькими файлами. Собирал и запускал. Потом исходя из своих нужд искал ещё что-то: как подключить библиотеку, как собрать с нуля что-то и тд
Шалом. Есть три книги: Марк Дж. Рочкинд. Программирование для Unix. Уильям Ричард Стивенс. Unix: Взаимодействие процессов. Уильям Ричард Стивенс. Unix: Разработка сетевых приложений. На какую сам сядешь, на какую мать посадишь? Что вы о них можете сказать и в каком порядке их читать, если к теме только подошел и мало что понимаю?
>>1268015 > Про хэш-таблицу посмотри. Кажется смотрел, но частями. Та тема не особо была интересна поэтому не вдавался в подробности. А вот про консоль вопрос. Ты говорил что до твоей штуки была какая-то своя поделка в которой уже никто разобраться не мог. Вот лично у меня ассоциация "консоль с командами" это выпадающая йоба сверху из Квейка. То есть если бы я делал подобную вещь, то ориентировался бы на это. А как та работала? Были ли ещё какие варианты?
>>1268025 Консоль в квейке теоретически проще, т.к. в основном в ней геттеры-сеттеры различных параметров, ну и возможность процессить команды через ;.
Как работала та - читала слово из потока, делала гигантский ИФ по поиску этого слова, потом изменяла флажок на рандомное значение а-ля 0xFAFB, читала следующие слово, и искала это слово внутри if (flag = 0xFAFB). Как было сделано автодополнение - я так и не понял, если честно. Слишком тяжело было этот ад читать, да и таски у меня были другие.
Когда нужно было добавить новую команду, я делал именно то, о чем рассказывал в докладе - копипастил похожую.
>>1268041 Что бы ты посоветовал сделать для резюме? Я имею ввиду какой-то проект который было бы не стыдно лол показать людям, вроде твоей консоли. Просто когда начал смотреть, думал что нихера не пойму, но потом посмотрев исходники кроме ветвления и автодополнения, в них не стал разбираться без труда сделал своё подобие.
>>1268055 Любой юзабельный и законченый. Настоятельно НЕ рекомендую делать игры, очень сложно, а толку мало. Лично я, когда начинал учить кресты (в 26 лет лол), писал хлам на qt, а-ля клиент для web api.
Вообще - если говорить про около-джунов, то я бы скорее не писал код, а старательно штудировал Майерса и прочие очень умные книги. И задрачивал алгоритмы на leetcode.com. Как показывает практика собеседований (я собесил больше 30 джунов), теория на данном уровне важнее практики.
>>1268059 > Настоятельно НЕ рекомендую делать игры, очень сложно, а толку мало Почему? Кажется это самый простой вариант: сделать клон какой-то и добавить от себя что-то.
Поясните кто-нибудь за clang. Скачал КодБлокс, скачал clang последний. В Кодблокс выбрал clang и оно нихера не собирает - нету стандартных либ. На сколько я понял - их надо качать отдельно, но при этом, вроде как, под винду их нет. В общем та ещё попа-боль. Вся надежда на шаряшего анона.
Псаны, приходится ли вам иногда пользоваться в своих проектах всякой lock-free хуйней? Или хуяк мьютекс туда, хуяк condition_variable сюда сойдет? Что-то меня пугают все эти memory ordering'и, да и вообще такой код очень сложно писать без ошибок.
>>1268015 >Мои горе-доклады постят на дваче. Это успех. А твой работодатель/коллеги знают, куда ты заходишь? Ты задумывался над тем что будет, если они узнают?
>>1268311 Смотрел как-то код lock-free очереди. Чуть крышей не поехал. Это принципиально невозможно писать без ошибок, тесты тоже ничего не протестируют. Единственный выход – формальная верификация, которая пока сильно страдает от комбинаторного взрыва на больших программах.
Пишу проект приложения и есть требование установки приложения в режим паузы (заказчик хочет, чтобы как в режиме дебага - нажал на кнопочку паузы и приложение ждет твоих действий).
Приложение многотопоточное и я сильно туплю не могу сообразить как это сделать правильно. До чего смог додуматься своими силами: - Создаем флаг паузы в основном потоке графического интерфейса; - Передаем флаг всем потокам в момент инициазации потока как указатель, чтобы его изменение из основного потока отображалось в остальных потоках; - Ставим проверку этого флага через каждый N функций на проверку не включил ли пользователь паузу; - Если он его включил, флаг меняется в основном потоке, меняется в побочных потоках, проходит проверку и побочные потоки уходят в вечный цикл до тех пор пока флаг не изменится, в свою очередь основной поток продолжает работать давай пользователю взаимодействовать с графическими эелментами.
Всё правильно? Или это можно как-то сделать изящней? Или это вообще всё хуйня и работать не будет? Пишу прогу в Qt 5.
>>1268584 > Ставим проверку этого флага через каждый N функций Я не знаю что там в стандартной библиотеке с потоками (только вкатываюсь в си), но через winapi можно явно заморозить нужные тебе потоки, без вечных циклов в фоне и проверок в непонятном месте твоей поточной функции.
Вот это наверное худшее что ты видел, но вот как-то так. Обрати внимание, что поток замораживается в произвольном месте выполнения и продолжается с него же (ещё вопрос, нужно ли это - если там чтение-запись файлов/сети или ещё чего-то, есть смысл перед постановкой паузы дописать всё и закрыть).
По крайне мере вечный цикл - точно костыль. Просто так без необходимости твой поток десять раз в секунду забирает себе нить выполнения для проверки флага? Серьёзно? Сделай так, что дочерний поток замораживает сам себя, а разбудит его главный. Если апи для resume/suspend в стандартной библиотеке нет (почему-то не смог нагуглить за несколько минут), то сделай через WaitForSingleObject. Второй пик. Поток с вечный циклом проверки флага и Sleep(100) жгёт такты, и требует переключения потоков, а поток с WaitForSingleObject абсолютно мёртвый.
>>1269012 Ты результат то пробовал вывести? a=29 b=30 29+rand()%31 Ты получаешь значения от 29 до 59.
Ещё при больших b у тебя это совсем неравномерное распределение будет. Про это конечно не говориться. Попробуй просто выведи 5 раз число а, шутки ради. Теоретически, нельзя лишь по результату строго утверждать что это не случайные числа.
Господа крестоносцы, где почитать о параллельных штуках кроме как у Страуструпа? У него есть что-то, но мне недостаточно и слишком комкано, хочу материала где более разжевывают что куда.
>>1268584 проблема всех вас, что вы просто, блядь, ебаные неучи у вас нет теории, вы тычетесь как щенки не разбираешься, тогда пользуйся высокоуровневыми абстракциями, в тех же либах дающих thread pool (это только в качестве примера), есть возможность остановить всех воркеров а вы, блядь, на голых средствах синхронизации каждый раз переизобретаете ебаные костыли
>>1269227 более того, если ты пользуешься голыми средствами синхронизации, ебаша промышленный код, то нужно сильно сомневаться в твоей квалификации потому что на фирмах, даже если делают СВОЕ, то сначала реализуют собственные более высокоуровневые абстракции для работы с любой параллельностью а в большинстве случаев достаточно пользоваться готовыми средствами потому что, блядь, это сложно это пишется годами серьезными дядями, а рядовой исполнитель который делает код который продается, хуй это осилит на коленке
>>1268533 проблема lock-free либ в том что НЕТ еще открытых/продающихся вещей которые уже вступили в стадию зрелости да, на крупных фирмах где-то уже смогли поднять свои решения, которые уже у них работают, но это все внутренние вещи при этом чтобы это сделать им пришлось пойти на немалые капиталовложения, потому что делать такое чертовски сложно
>>1268311 >хуяк мьютекс туда, хуяк condition_variable сюда Так и живём. Хотя твой пост натолкнул на идею попрофилировать куски кода в паре проектах, где single producer/single consumer очереди. Хотя там contention мьютексов очень низкий, может и не стоит даже заморачиваться.
У меня есть несколько вопросов и мне нужен совет - то ли я вообще делаю или нет.
Я студент и хочу вкатиться хотя бы в фриланс. Сразу скажу что вроде погромировать как-то минимально умею, наверное не хуже веб макак которые решили вайти вайти, див2 олимпиады там решал, опенгл ковырял, шейдеры простенькие писал, стандарт С++(11) по толстым книгам на 1000 страниц два раза перечитывал целиком. Полазил по англоязычным сайтам с фрилансом в категории С++ и обнаружил что в заказах до 30$ многим нужно вот что: Содомирующие кубы на опенгл(причем довольно часто, видимо для курсачей) Sql Веб(либо клиент и сервер написать, либо скачать картинку и распарсить на ней что-то, вот такого уровня) Разные программы с интерфейсом CUDA
Так вот, собственно в чем мои вопросы: На чем лучше всего делать интерфейс к программе на крестах(желательно чтобы еще и нормально можно было опенгл контекст создать)? На Qt что ли? Через что удобнее всего работать с сетью(микроопыт и представление как это работает есть)? Для sql как я видел есть много библиотек, какую лучше освоить? Что вообще делать? Не понимаю куда двигаться. В вузе(такой себе, в топ3-5 дс2) математику и всякую там дискретку более-менее нормально преподают, но это само собой надо знать, а вот программирования нормального похоже там так и не будет, и я уж молчу про что-то прикладное типа того что я описал.
>>1269218 Просто по ссылке почему не устраивает? void GiveMeArray(int array, size_t x, size_t y) { for (auto i = 0u; i < x; ++i) for (auto j = 0u; j < y; ++j) (array + i + j x) = 0; }
int main(int /argc/, char /argv[]*/) { int array[100][100]; GiveMeArray(&array[0][0],100,100);
>>1263368 (OP) Доброго дня, аноны. Я не программист, но столкнулся с задачей скомпилить сорцы одной софтины с гитхаба. Как компилить файлы по одному я знаю, но как скомпилировать папку с кучей файлов формата .h и .cpp в один экзешник?
>>1270383 Хочешь сказать, что здесь нельзя её применять?
Напомню, что статические "многомерные" массивы представляются в памяти в виде одномерного массива построчно. (§8.3.4 п. 9 стандарта С++11). Таким образом приведенный в коде массив имеет размер 100×100=10000 элементов. Легко показать, что выражение (i + j × x), используемое в качестве индекса этого массива, никогда не превышает его размера. А следовательно (array + i + j × x) удовлетворяет всем требованиям для адресной арифметики и является корректным указателем, а его разыменование не вызывает UB.
Принимая во внимание вышеизложенные факты, я утверждаю, что ты хуй и говно.
>>1270385 >Хочешь сказать, что здесь нельзя её применять? Да.
> Напомню, что статические "многомерные" массивы представляются в памяти в виде одномерного массива построчно. Ну и? Пусть себе представляются. struct { int i; int j; }; тоже может представляться в памяти как int[2]. Это не значит что из указателя на i можно получить указатель на j прибавлением единицы.
> А следовательно (array + i + j × x) удовлетворяет всем требованиям для адресной арифметики и является корректным указателем, а его разыменование не вызывает UB.
Откуда это "следовательно"? Из предыдущего предложения это не следует. Ну или покажи, что следует.
> Принимая во внимание вышеизложенные факты, я утверждаю, что ты хуй и говно.
>>1270392 О чём тут говорить? Очевидный выход за границу массива. Вот аналогичный код. В constexpr я не могу писать в массив, так что только чтение.
constexpr int sum(const int^ arr, int x, int y) { int sum = 0; for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) sum += ^(arr + i + j × x);
return sum; }
int main() { constexpr int arr[2][3] = { +1, -1, +1, -1, +1, -1, }; constexpr int s = sum(&arr[0][0], 2, 3);
return s; }
$ g++ prog.cc -Wall -Wextra -std=gnu++2a
prog.cc: In function 'int main()': prog.cc:14:26: in 'constexpr' expansion of 'sum((& arr[0][0]), 2, 3)' prog.cc:14:43: error: array subscript value '4' is outside the bounds of array type 'const int [3]' 14 | constexpr int s = sum(&arr[0][0], 2, 3); | ^
>>1270398 >Это какие-то фичи, связанные с constexpr? Да. Выражение с UB (из Core Language) не является константным. Такой вот способ сделать UB видимым.
>>1264099 Тоже компилятор. Ток там регистры и их состояния. Запись в регистр, чтение с регистра и много ещё манипуляций разных. Чтоб чётко понимать суть нужно знать архитектуру микрухи и ассемблер. Он даёт ясность в том, что от тебя нужно микрухе
>>1270496 >>1269662 Ну не совместимы так не совместимы, вообще не критично, мне это не для денег нужно все равно. Суть-то в том, что в том что я увидел, что там требовались какие-то конкретные практически применимые вещи, которые по идее я должен хотя бы на базовом уровне уметь, откуда и вытекает моя вторая часть вопроса: > На чем лучше всего делать интерфейс к программе на крестах > Через что удобнее всего работать с сетью > Для sql как я видел есть много библиотек, какую лучше освоить? По крайней мере первые два - это то что мне реально пригодилось бы. Не для какого-то даже фриланса, а просто потому что ну реально же как без этого обойтись можно?Вот захочу я какую-нибудь микрософтину написать именно на с++ просто для себя - и придется гуглить какой-нибудь кал, который еще и окажется неэффективным и неудобным говном мамонта. Поэтому если не сложно - подскажите, на какие библиотеки(или в случае с интерфейсом наверное одной библиотекой не обойтись, ясное дело нужна целая среда с редактором форм) по вашему мнению мне стоит в первую очередь обратить внимание?
>>1270549 Так в коде на скрине нет UB. > Пока больше похоже на то, что constexpr не может в многомерные массивы. Больше похоже на то, что у тебя ICQ < 55.
>>1270569 Алло, долбоёб, ты? Это >>1270549 отличается от этого >>1270397 только одномерным массивом, на шесть элементов. Что абсолютно эквивалентно двухмерному массиву 2 на 3. И не берется ссылка на хуй пойми чего.
If any of the operands is a pointer, the following rules apply: ... In any case, if the pointed-to type is different from the array element type, disregarding cv qualifications, at every level if the elements are themselves pointers, the behavior of pointer arithmetic is undefined. In particular, pointer arithmetic with pointer to base, which is pointing at an element of an array of derived objects is undefined.
If the pointer P points to the ith element of an array, then the expressions P+n, n+P, and P-n are pointers of the same type that point to the i+nth, i+nth, and i-nth element of the same array, respectively. The result of pointer addition may also be a one-past-the-end pointer (that is, pointer P such that the expression P-1 points to the last element of the array). Any other situations (that is, attempts to generate a pointer that isn't pointing at an element of the same array or one past the end) invoke undefined behavior.
Суть токова. Я уже много лет хуячу сложные штуки на плюсах, но кодинга получается очень мало, в основном проектирование, анализ и т д. И стандартная библиотека у нас почти не используется. Максимум - какой-нибудь вектор. Примитивы типа conditional variable, тредов у нас свои, со своим апи. И вот задумал я сменить работу. Но понимаю, что везде нужен стл. Стл заботать, просто читая книжку/цппреференс - это убогое занятие. Идеальное знание мне не нужно, нужно просто не обосраться с общеизвестными функциями, применениями и паттернами. Дак вот, как лучше всего стл-то до нужного мне уровня заботать? Может быть, есть ресурс с набором несложных задач на стл, аля leetcode?
>>1270742 Бля и чо что майерс? Я его и книжку, в принципе, прочитал. И лекции смотрел. Все круто и интересно, только в голове сильно не оседает. Надо хотя бы на игрушечных задачах со всем поиграться. Вопрос в том, где игрушечные задачи взять
>>1263368 (OP) Здравия анонам, есть код: catalan.hpp: #pragma once /! \file catalan.hpp \author Your name here \date Development date \brief Student's Catalan number function implementations. /
// ToDo:implement the catalan_bionomial() and catalan_product_series() functions. #include <boost/multiprecision/cpp_int.hpp> using namespace boost::multiprecision;
cpp_int catalan_bionomial(cpp_int n) { if (n < 2) return 1;
cpp_int ret = 1; for (int i = 2; i <= n; i++) { ret = ((n + i)/i); }
return ret; }
ut_catalan.cpp: /! \file ut_catalan.cpp \author Garth Santor \date 2018.09.09 \brief Test catalan number function implementations. /
// import the boost unit test framework #define BOOST_TEST_MODULE GradePellFunction #include <boost/test/auto_unit_test.hpp> #include <boost/mpl/list.hpp>
// import the boost multiprecision integer library #include <boost/multiprecision/cpp_int.hpp> using namespace boost::multiprecision;
// import standard libraries #include <cstdint> #include <vector> using namespace std;
Но когда пытаюсь запустить: Ошибка LNK2019 ссылка на неразрешенный внешний символ "int __cdecl cpp_main(int,char * const)" (?cpp_main@@YAHHQEAPEAD@Z) в функции main ut_catalan G:\Projects\Programming\Фриланс\Task #214310 Numerical Limits\Numerical Series (Start)\ut_catalan\libboost_prg_exec_monitor-vc141-mt-gd-x64-1_68.lib(cpp_main.obj)
Ошибка LNK1120 неразрешенных внешних элементов: 1 ut_catalan G:\Projects\Programming\Фриланс\Task #214310 Numerical Limits\Numerical Series (Start)\x64\Debug\ut_catalan.exe
>>1270751 >Вопрос в том, где игрушечные задачи взять у страуструпа в "языке программирования с++, специальное издание" неплохие упражнения это если надо конкретно по языку и стандартной библиотеке знания закрепить практикой
Даются три синглтона. Первый — классический, как Банда завещала. Второй — хитрый-маерсовский из одной статической функции возвращающей свою статическую переменную. И третий — какой-то ленивый синглтон.
Так вот, там пошла Java. Я ее не понимаю, даже не знаю, актуальна ли сама проблема для C++ или там чисто жабские заморочки какие-то. Растолкуйте, что за ленивый синглтон, как его делать на крестах и нужно ли вообще?
>>1271024 Статическая переменная это и есть ленивый синглтон. В C++11 её инициализация потокобезопасна и это достигается либо double-checked locking-ом, либо ещё оптимальнее (https://stackoverflow.com/a/27206650)
Делаю лабу в C++ Builder 10, когда функцией StrToFloat преобразую ввод из Edit1, его пидорасит. 1,5 нормально переводит в float, а вот 0,525 превращается в 0,524999976158142, ответ в задаче не правильный. Как фиксить?
>>1263725 >Получать придется, если хочешь сьебать с РФии Уже спрашивали >>1263744, но так как ответа не последовало, спрошу. Зачем нужно российское ВО за её пределами?
>>1263755 вышка удаленна в гути хоть как то котируется? перевелся из шараги средней на 3ий курс, потом институт закрыли и перекатился на 4год из 5 в сибгути , на удаленку решил вместо вечерней щас думаю нахуй бросать или все таки 1.5 года доучиться, пригодится ли такой дисплом как исключительно формальный для выкатывания нннахуй из рашки? какие подводные, анон подскажи плс
Бывает так, что перекрёстно используются заголовочные файлы, насколько помню так нельзя.
То есть ты подключаешь два заголовочных файла и в каждом из них уже есть один и тот же такой файл и дабы этого избежать используют это, а так же продумывают иерархию файлов всей программы.
>>1271785 Нет. Перед тем, как включить код, определяется константа SLOVO. И если эта константа уже определена ранее, то код из файла не включается. Этакий аналог if.
>>1271780 Нет, это хорошо известная идиома, которая блокирует повторное включение кода. Например как уже написали так делается защита инклюдов, иначе будет сыпать ошибки e1488:zalupa already defined in zalupa.h(228). Можно её сломать в принципе, если вручную задефайнить, иди раздефайнить протектор. Возможно лучше было бы использовать #pragma once, но это не стандарт, и свои проблемы имеет.
Гайс, подскажите. Как мне перегрузить оператор ВНУТРИ класса ? То есть, я хочу, чтобы функция внутри класса была с перегруженным оператором. Заранее аригато.
>>1272033 К примеру Class hooj { public: int num; hooj pidor; } Class bomj { hooj numb; bomj(int n) { numb->num = n; } //как здесь сделать так, чтобы не обосраться ? Ведь мы ссылаемся на несуществующий кусок памяти. foo(int i) { numb->num = i; //как это сделать блядб, ведь мы пытаемся присвоить типу hooj инт ? } }
>>1272051 Дак ты позаботься чтобы у bomj был hooj Например bomj(int n) { numb = new hooj(); numb->num = n; } Только дальше ты всё равно обосрёшься при управлении памятью. Читай про конструкторы копирования/перемещения, деструкторы и смарт поинтеры. А перегрузка операторов тут ни при чём.
Нужно написать простой калькулятор (обычная лабораторка).
Суть в том, что умножать/делить/степенить(!) и прочее нужно производить не кнопочками, а символами, которые вводит пользователь.
Сами вопросы: 1. Как правильно реализовать "сканировние" и вычисление вводимой строки 2. Как расставить приоритеты сначала умножение, потом сложение и подобное 3. Реализовать скобочки.
Может кто обьяснить, как написать код, который перебирает квадратную матрицу, находит максимум и минимум. После чего, если максимумов/минимумов больше 1, то выбрать первый. Пока-что написал вот такой код cpp.sh/6xshn, до этого пробовал сделать 3 цикла со счётчиками, но выходило слишком много и иррационально, да и один хуй не сработало
>>1272317 Перемудрил ты что-то. Достаточно одного прохода с двумя ифами на проверку меньше минимума и больше максимума. В теле ифа присваиваешь новый мин/макс и тут же обновляешь рядок с колонкой, а не в следующем обходе.
>>1272376 Так мне нужно чтобы оно взяло только одно значение максимума. Я думал по логике: если число равно максимуму - скип, иначе если больше максимума - новый максимум, если меньше минимума - новый минимум.
Дохуя глупый вопрос, наверное.Вот у меня есть класс и нужно, чтобы пользователь мог удалять и создавать объекты по желанию. Можно ли это сделать без динамического распределения памяти?
>>1272415 цикл for(int i : name) {...} раскрывается в цикл for(vector<int>::iterator it = name.begin(); it != name.end(); ++it) { int i = ^it; ... } ^ -- это звездочка. Кури итераторы, в общем.
>>1272497 Шоб потом мамкины хацкеры могли выебать твою программу во все щели, а конкретнее там где ты используешь небезопасные функции типа gets и scanf, а конкретнее методом анального переполнения буфера, чтением и перезаписью в/из памяти там, где ты напишешь printf(...) c форматированием и забудешь указать типы данных, и прочим распылением в кучу.
>>1272933 есть большая разница между "на старте карьеры" и "просто попасть". Опытному разработчику там нехуй делать, а вот новичку посмотреть на большие проекты, процессы разработки и прочее - максимально полезно. Да и в резюме строчка почетная.
Гайс, ну подскажите, как в данном коде реализовать деструктор, чтобы не прострелить себе ногу ? Компулятор говорит, что я - мудак и память в хипе не удаляется, не догоняю, как удалить. Заранее - аригато. https://pastebin.com/6GUtDp1E
>>1273052 Бро, прости, но компилятор прав. Ты пытался написать стек, но сделал это настолько через задницу, что мне не понять твою задумку (то есть твоя реализация очень далека от того как это делается). Ты бы хоть комментарии оставлял, если хочешь чтобы тебе помогали разобраться. Попробуй нарисовать схему устройства/работы твоего стека.
Аноны, есть цикл в котором по результатам исчисления должно выводится наибольшее и наименьшее значение, он выполняется сколько-то раз. Если с максимумом всё просто, просто присвоил нулю и погнал сравнивать, как быть с минимумом? Присвоить ему значение первого элемента цикла не могу, так как в нём происходят все вычисления, а присваивать каждый раз смысла не имеет. А так выходит что минимум не изменится.
>>1273422 В том то и дело, что там не массив. Но на ту хуйню я уже забил. Думаю как обычно, внезапно прийдет озарение позже. Подскажите лучше почему не вызывается перегруженная функция. На первом скрине заголовок класса, на втором реализация. А вызывается какого-то хуя обычная функция cout. Не знаю как скинуть код в трёх файлах
Аноны, а что с вордовским doc'ом не так? Я хотел найти библиотеку, чтобы программно создавать доки, и надеялся что ее будет просто найти - это же все-таки DOC, охуеть какой популярный формат. Но ничего не нашёл. Рили ничего. Может кто знает способ, который хотя бы позволит редактировать готовые доки, на уровне найти/изменить строку. Все решения что я смог нагуглить требуют установленного ворда, а такие решения не очень подходят.
>>1273675 Уже связался, не по своей воле. Но не ожидал что все так плохо будет. По сути мне просто нужно генерить доки по одному шаблону, форматирование там одинаковое, только количество текста разное в паре абзацев. С нуля я так понял мне не получится такие генерить, но хотя бы брать готовый док и текст изменять в нём. Я верю что есть способ.
У меня вопрос к крестопидорам. Я понимаю что раии, ексепшион-тред сэйфети и прочая хуита идущая в нагрузку к трехстрочному коду дефолтом сейчас стильно модно молодежно. Но зачем вы превращаете язык в тормознутый ждаваскипт? Понижаете уровень вхождения для ньюфагов? Код http://cpp.sh/33c4e релейтед Мимо из си треда.
>>1273937 В случае с вектором очевидно: выделенная память заполняется значениями по умолчанию, то есть нулями.
Второй же тест медленнее третьего не из-за умного указателя ну, не только, а потому что calloc быстрее new. Вероятно, потому что new может вызвать исключение. Так что если вызывать noexcept-версию new честно, не ебу как, то может стать быстрее. А может и нет.
Кстати, make_unique<uint8_t[]> тоже инициализирует объекты и работает ещё хуже вектора.
>>1273937 >>1274027 calloc хоть и отдает кусок памяти заполненный нулями, но само заполнение не происходит в этот момент. На этот область памяти мапируется уже обнуленная страница. А вот при дальнейшем изменении уже сработает copy-on-write.
>>1273937 >Код http://cpp.sh/33c4e релейтед Да нихуя не релейтед. Только конченный дебил поведётся на это. Компилятор просто выкинул calloc/free. Отключи оптимизации и calloc сравняется с unique_ptr.
Подскажите пожалуйста что можно почитать по поводу манипуляций с аутпутом в терминал. Есть код с пикрил 1 - он печатает содержимое двух std::map, результат на пикрил 2.
Я бы хотел узнать как сделать так, чтобы цифры были четко друг под другом, двоеточие под двоеточием и так далее, ну и длина строк со знаками "+" подбиралась под длину строки автоматически.
Пытаюсь в QT по нажатию кнопки (в слоте clicked()) запустить вот такой код https://pastebin.com/Zu3Rtq8H 2 раза пересоздавал проект, выскакивает ошибка:
Semantic Issue
40:9: error: no matching function for call to 'CreateProcessW' processthreadsapi.h:117:23: note: expanded from macro 'CreateProcess' _mingw_unicode.h:12:32: note: expanded from macro '__MINGW_NAME_AW' :2:1: note: expanded from here processthreadsapi.h:116:29: note: candidate function not viable: 9th argument ('const _STARTUPINFOW *') would lose const qualifier
>>1263368 (OP) Бля, нахуй вы православное расслоенное произведение называете pullback, вроде не смузихлёбы же коворкинговые, дядьки-крестовики, а туда же.
>>1272264 1. Подглядываешь какой у тебя следующий символ с помощью cin.peek(), считываешь даблы оператором >>, а символы cin.get(). 2. Получаешь число. Далее в цикле пока !cin.eof() складываешь\вычитаешь последующие числа. Возвращаешь результат если ничего не осталось или встретил неизвестный символ. Это функция add_sub(). Пишешь аналогичную функцию div_mul, которая умножает\делит и возвращает результат если встречает неизвестный символ. В функции add_sub заменяешь все получения следующих чисел на вызов div_mul. PROFIT!!1 3. Рекурсия.
>>1263383 Скажи лучше, чем оправдано их существование, почему нельзя было сделать все методы виртуальными по-умолчанию? Неужели все дело в крошечном оверхеде при вызове?
Аноны памагите. Есть указатель на символьный массив >char hobby; Как его блять вывести на экран? Сейчас пытался простенький класс написать, и понял что не знаю как это сделать, ибо программа просто не работает если выводить hobby или hobby
>>1275470 Заметь, если оставить только вторую корову а первую и третью закомментить - он печатает как надо, т.е проблема где то в инициализации по умолчанию
>>1275477 Я скорее всего из-за недостатка опыта не вижу какой-то очевиднешней хуйни. Хобби оно кстати присваивает по всей видимости, ибо если заменить вывод на вывод адреса то оно будет давать разные адреса, как и нужно. Если указатель никуда не указывает, его же нужно нулевым инициализировать, верно?
>>1275479 >Хобби оно кстати присваивает по всей видимости, ибо если заменить вывод на вывод адреса то оно будет давать разные адреса, как и нужно. Если указатель никуда не указывает, его же нужно нулевым инициализировать, верно? >
Я сам не особо опытный если быть честными, но твоя программа падает на методе ShowCow, и насколько я понимаю это из за того что ты пытаешься принтануть нулл поинтер, что если заменить в конструкторе по умолчанию hobby = NULL; на hobby = new char; ?
>>1275485 Теперь всё работает, но в первом обьекте выдаёт хуйню вместо значений. Почему с NULL не работает? В книге написано либо с ним делать, либо с nullptr.
>>1275487 > обьекте выдаёт хуйню вместо значений. Почему с NULL не работает? В книге написано либо с ним делать, либо с nullptr.
Я книг не читал к моему сожалению, но мне кажется нуллом можно инициализировать если ты не планируешь в дальнейшем где то использовать это значение по умолчанию, или если планируешь но ты чем то нормальным его перед этим перезапишешь.
Пикрил - результат работы программы. у меня убунту - никаких артефактов не вижу в консоли
>>1275488 Видимо опять студия шалит. Ладно, тут важнее было понять как это работает, спасибо за помощь всем отписавшимся. Если когда-то стану нормальным программистом тоже помогать буду
>>1275463 >Аноны памагите. Есть указатель на символьный массив >>char hobby; >Как его блять вывести на экран? Сейчас пытался простенький класс написать, и понял что не знаю как это сделать, ибо программа просто не работает если выводить hobby или hobby
>>1275476 >Заметь, если оставить только вторую корову а первую и третью закомментить - он печатает как надо, т.е проблема где то в инициализации по умолчанию
У тебя небольшой проеб в конструкторе по-умолчанию. Пытаешься вывести данные, обращаясь по нулевому указателю. Так не делают.
Можно сделать конструктор по-умолчанию таким: >Cow::Cow(const char nm="empty",const char ho="empty",double wt=0.0) ... при этом не забудь закомменить в заголовочном файле объявление Cow::Cow() и в самом .cpp его определение.
>>1275487 >но мне кажется нуллом можно инициализировать если ты не планируешь в дальнейшем где то использовать это значение по умолчанию, или если планируешь но ты чем то нормальным его перед этим перезапишешь.
>>1275499 >>1275497 Спасибо, понял насчёт нулевого указателя. Алсо, где можно посмотреть на прототипы функций который обьявлены в библиотеках? Внутри какая-то странная дичь, а самих функций я не нашёл. Просто недавно узнал что с помощью strcpy() можно копировать со сдвигом, а если бы не пример я бы об этом никогда и не узнал.
>>1275505 Ошибся, не прототипы а сами принципы их действия. Хочу посмотреть как strcat реализован, ибо когда пытаюсь сам конкатенацию строк сделать какие-то ошибки вылетают
>>1275505 >Просто недавно узнал что с помощью strcpy() можно копировать со сдвигом, а если бы не пример я бы об этом никогда и не узнал. Ссылку в студию.
>>1275506 >Хочу посмотреть как strcat реализован Обычно такой хуйней никто не занимается. А тупо использую библиотечные функции. Ибо кому интересно заново в 100500 раз изобретать велосипед...
>>1275529 >Нихуя, тут кто-то до сих пор в 98й студии графоманит. Так а хуле нет? Легкая, быстрая IDE. Ничего лишнего. Для новичка - самое то. Правда пришлось под это дело WinXP на виртуалку ставить, но все равно. Потом, когда садишься на MSVS 2017, охуеваешь от одной только возможности ебашить код сразу в 2 файла в одном окне.
>>1275565 Бля. А если я захочу понять как работает та же strcat то мне на свой опыт прийдется опираться? Или всем похуй и ими пользуются так же как и каким-то cout, не задумываясь об использовании? Внезапно понял что это принципы ООП
>>1275577 Тебе сначала нужно понять, что из себя представляет строка и научится работать с указателями. Интуитивное понимание всех этих строковых функций появится после. Но если тебе нужин быстрый фикс, то вот https://linux.die.net/man/3/strcat
>>1275602 >>1275602 > научится работать с указателями Тут выше писали что современный С++ делает всё, чтобы люди не ебались с этими указателями. А за ссыль спасибо, я так понимаю это все с практикой прийдет?
>>1275774 Я смог попасть в будущее. Воксельные игрушки есть на compute shader'ах написанные. Его поделка сама по себе любопытная, но на данный момент уже сильно пахнет мамонтами. Кстати странно, что он git вместо православной cvs использует как вспомню про неё, аж трисёт пздц.
>>1275605 >Тут выше писали что современный С++ делает всё, чтобы люди не ебались с этими указателями Не ебаться с ними это одно, не знать как они работают это другое. С++ дизайнился как язык с абстракциями, но при этом производительный как С. А производительность эта получается как-раз за счет низкоуровневой ебли с разными вещами, включая указатели. Я бы на твоем месте задумался, а нужен ли мне С++. Моим первым языком были кресты, и, после того как я попробовал другие языки, я жалею о том, что не сдеал этого раньше. Я не хочу сказать, что С++ плох, просто так оказалось, что задачи которые я решал, луше подходили для других языков и я переплачивал своим временем за ненужную мне производительность.
>>1275832 Хотелось бы добавить что, чтобы ебаться с низкоуровневыми вещами не просто так, а реально увеличивая производительность программы, нужно обладать специфическими байтоёбскими скилами. И вообще редко у кого получаеться эффективно ебаться с байтами и делать высокоуровневые абстракции, зачастую просто не хватает времени. Именно по этой причине программирование медленно но верно разделяется на сишное байтоёбство и выскокуровневые абстракции, как в своё время от ассемблера отпочковался C.
>>1276167 Мне вот наоборот байты поебывать и ковыряться в профайлере как-то проще, чем выдумывать всякие там абстракции. Я прям кончаю, когда программа начинает работать быстрее. А вот как-то структурировать код я не умею, от того и страдаю.
>>1276601 Очень редко (но иногда очень важно), чтобы память бралась не из кучи, а из чего-нибудь другого. Например, чтобы сделать всякого рода кеши. Или, например, Fixed-Size аллокаторы, которые работают именно так, как тебе надо, причём со скоростью света. Но это в принципе нужно только для эмбедщины и риалтаймщины. И хрен знает, как именно это сделано в плюсах, такие вещи я руками всегда писал. STL слишком непредсказуем.
Работал над двумя разными проектами в разных местах и даже разных странах, ололо, где с самого начала выделялось несколько больших кусков памяти, и далее во всем проекте было ровно 0 аллокаций памяти. Писался собственный аллокатор, и весь STL в проекте был на нём завязан.
>>1276177 >Зачем тогда отпочковывался ассемблер если был фортран?
Потому что:
1) Существуют не отображенные в языке сущности, с которыми можно оперировать только в ассемблере. Как пример - части кода операционной системы, отвечающие за запуск защищенного 32 (или длинного защищенного 64) битного режима, переключение задач - всё это задействует не отображенные в память сущности (специальные регистры).
2) Существуют платформы с малым объемом памяти программ и данных - например микроконтроллеры начальных линеек и иногда проще заплатить один раз зарплату/по договор-подряду за еблю байтов, чем увеличивать стоимость всей продукции на цену дорогого МК что на крупных партиях дает нехуёвые такие суммы.
3) SIMD-инструкции, даже сегодня заставить компилятор и увидеть в нетривиальном коде и использовать сложно. Впрочем, задача решается интринсиками и тут ассемблер, на самом деле, пролетает.
Ну и да, уже из предпоследней вижуалстудии ассемблер выкинули.
Что какбе намекает нам о его реальной необходимости во втором десятилетии 21 века.
Что вообще делают на плюсах? Вот скажем есть чувак в ДС, он не знает никаких предметных областей, типа геймдева или машин лернинга. Но знает модерн С++. Какие вот у него перспективы? Я чет смотрю вакансии на хх и там какая-то хуйня. Требования обычные, но что они блять пишут вообще на голых крестах? Калькуляторы на винапи или что блять? Я вот не могу представить. Есть вообще смысл задротить плюсы, если ты не занимаешься наукоемкими штуками? Не выйдет так, что ты будешь через n лет сосать хуй в какой-нибудь отечественной компании за 50к в ДС?
>>1277062 А по делу, бекенд например который работает со стримом видео. Кроссплатформенные либы, под разные архитектуры. Но пока ты достигнешь такого уровня у тебя волосня на яицах поседеет.
Так же серъезные забугорные вакухи зачастую это стронг скил це плюс плюс. Так же погляди нпример на русский стартап nginx у них постоянно висят вакухи це плюс плюс
>>1277062 >Что вообще делают на плюсах? Поддержвают легаси десктопный софт (CADы, фотошопы, видеошопы, аудиошопы и плагины к ним), пишут системное ПО (в первую очередь эмбед), высокопроизводительные приложения с низкой латенси (например софт для стриминга видео, для крипты и т. п.). >Какие вот у него перспективы? Хуевые, так как конкурировать нужно будет с мужиками двадцатилетним опытом. Эти же мужики давят зарплаты вниз - их очень дохуя. Учи CUDA, там процент шарящих мужиков с личинками и ипотекой значительно ниже. >Есть вообще смысл задротить плюсы, если ты не занимаешься наукоемкими штуками? Математик, знающий кресты, и рождающий более-менее приемлемый код (типа меня), обезьяна настолько редкая, что на фирмах, как правило, один дядька пишет алгоритмы на скриптовом языке, а второй уже переписывает их на C++ (особенно в случае CUDA). Поэтому имеет смысл. У меня коллега (который как раз 35+) сначала писал обвязки для моего говнокода, теперь уже сам вкатился в научную часть и пилит что-то. >Не выйдет так, что ты будешь через n лет сосать хуй в какой-нибудь отечественной компании за 50к в ДС? Как раз с крестами зарубежную удаленку найти просто, поэтому вопрос сосать хуи в отечественной компании или нет не стоит, после пары лет опыта надо уже подыскивать западную удаленку.
>>1277082 >Учи CUDA Что там учить? Там вопрос не скилла, а просто времени. И приложений твоей куды особо нет. Ну кроме как диффуры решать в нии, чем ты и занимаешься похоже.
>>1277111 Там ответ на вопрос, почему нужно учить CUDA. На самом деле для молодежи сейчас есть ровно два стула, либо учить CUDA, либо не учить кресты вообще. Все остальное дно и прозябание в безуспешных попытках конкуренции с сорокалетними дядьками.
>>1277114 Да ты заебал. Где твоя куда используется вообще? На хх 20 вакансий с кудой на весь ДС, из них 15 с машин лернингом. Че ты за дичь втираешь? Ни у кого блять нету кластеров с нвидиа, кроме каких-нибудь универов, а если какой-то софт на gpu, то там opencl юзают по понятным причинам.
>>1277062 Там выше про сорокалетних мужиков уже антон отписался. А получилось это потому,что за последние лет этак десять с++ стабильно выдавливался из привычных ниш другими языками. Это вызвало жёсткую конкуренцию и навес предложения над спросом. Так что лучше выбрать другой язык для вкатывания, а c++ иметь прозапас (либо пару-тройку лет работать в говНИИ/касперском/яндексе за жрат, а потом уёбывать на галеру/удалёнку или за бугор).
>>1277119 >Где твоя куда используется вообще? Текущее десятилетие это миграция высокопроизводительного софта на видюхи. CUDA, OpenCL - не так важно, но у нвидии намного лучше тулчейн, а отлаженный CUDA-код переносится на OpenCL чисто механически. Софт, как правило, юзает, и то, и то, потому что на карточках nvidia opencl работает медленно, а особых проблем поддерживать два API нет, если, конечно, у тебя не софт уровня OpenCV. >На хх 20 вакансий с кудой на весь ДС, из них 15 с машин лернингом. И что? Со словом джава вакансий в два раза больше, чем со словом с++, однако почему-то ты в крестотреде. Если для тебя критерий - количество вакансий, что ты тут вообще забыл. Это рынок, можно работать на широком рынке взаимозаменяемых обезьянок, а можно быть эксклюзивным спецом, и искать новую работу на месяц дольше, но зато с зарплатой повыше автоматом. Тебе нужна одна вакансия, на которую тебя возьмут. Остальные это просто информационный шум. А теперь пройдись по этой тысяче вакансий с++ на хх и выкинь оттуда поддержку легаси говна, ебанутых людей ("Проект - десктопный клиент лично-командного мессенджера." - на С++ в 2018 году), вакансии, где с++ упоминается в списке из 20 языков и прочий кал. Останется, может, сотня чего-то годного. Из них 10 будут теми, где знание видюх жирный плюс. И это дохуя.
>>1277127 >Текущее десятилетие это миграция высокопроизводительного софта на видюхи
Угу, в формате "Бля, как к этому кораблю приделать крылья и колёса, чтобы он при этом ездил как болид Top Fuel и летал аки МиГ-31".
Нормально перекладывается по-сути только развертка цикла/map по большому количеству несвязанных объектов и то, только на простых алгоритмах в несколько строк. Тупо потому, что на сложных начинается ебань с плясками и архитектурой, заточенной под рендеринг потреблядской игроёбы с кинцом и прочих дрейкфейсов для даунов. Тут тебе и кеш размером как на Pentium 2 в его бюджетнейших модификациях, и выполнение обоих веток кода на ветвлениях (а если у тебя какой-нибудь паттерн-матчинг то вообще отсос фрактала).
По итогу вся CUDA сводится к "переписать сложный алгоритм в лапшу из кучи проходов простых и то, если у тебя много данных".
Пикрелейтед, temp - структура-шаблон intg, у которой есть метод l_3 с одним int в параметрах. Как корректно записать тип r без auto или decltype? (Если попробовать его привести к другому типу, он обзывается как в комментарии, и такой тип даже не компилируется. И как вообще этот объект называется, лол? По запросу "указатель на метод класса" в первых 4 пунктах что-то другое.
Вообще, там несколько десятков методов одинакового типа вроде l_3, их все нужно вызвать и ещё перед/после каждого выполнять одни и те же действия. Код для пяти штук раздулся уже на две страницы и для краткости хотелось бы или записать это в цикле (или просто передавать методы в другой метод с обёрткой).
>>1277472 >И как вообще этот объект называется, лол? По запросу "указатель на метод класса" в первых 4 пунктах что-то другое. Указатель на метод отличается от указателя на функцию тем, что у метода первым параметром должен идти указатель this. Поэтому он и cannot convert.
>>1277482 Благодарю, разобрался. Заработало _zn<T> (intg<T>::* r)(int)=temp.l_3; (&temp.l_3 и &intg<T>::l_3 тоже работают) Запутался с этим RetT - в текстовом классе (возвращающем нешаблонный тип) всё работало, что сильно меня смущало.
А ещё вопрос. Там внутри intg прописано using zn=_zn<T>. Возможно ли заменить явное указание вспомогательной структуры _zn<T> на что-то менее громоздкое, чем typename intg<T>::zn? Почему просто temp::zn не работает? Синтаксически довольно ясно что это означает, вроде бы.
>>1277486 >cannot convert Это ошибка осталась, когда я написал int i = r, просто чтобы среда разработки показала свои соображения по поводу типа r. Код то нормально компилируется.
Можно задефайнить тип метода как-то так: template<class T> using IntgFun = typename intg<T>::zn (intg<T>::*)(int); ... IntgFun<double> r = &intg<double>::l_3;
>>1277519 Нет, qtcreator+mingw64. Вот тут работает любое из a.f/&a.f/&A::f - даже предупреждений нет. Меня тоже удивило, по сравнению с требованием ко всяким typename это очень неожиданно.
Анон, вопрос не про с++, но тем не менее Как проектируют системы? Не имею ввиду какие-то мегапрограммы типа игр, браузеров и тд. А, допустим, какие-то их небольшие элементы/части. Например, система событий. Можно написать на switch/case что-то, можно с наследованием или какую йобу на шаблонах. Как учиться таким штукам? Читать код, конечно, можно и нужно, но и авторы ведь тоже откуда-то эти мысли брали.
В основном в меру своей компетенции, возможностей языка, своей эрудиции, любознательности и путём проб и ошибок. Удачные решения объявляют бест практисами и пишут про них в книгах.
Но до того как они становятся удачными решениями пишется куча прототипов/рабочих задач в том числе и кривых.
>>1277614 >но и авторы ведь тоже откуда-то эти мысли брали. Методом тыка скорее всего, ну или методом мысленного тыка, если опыта сильно дохуя. Читай код, а лучше всего используй его, нахуя сейчас, например, писать систему событий.
>>1263368 (OP) Добрый вечер дороги антуаны. Нужна ваша помощь. https://pastebin.com/uE5sNGXj Код для полиза. Не могу разобраться в строчках: 16)Stack() : head(0) {} 67)return head == 0 ? true : false; Искал в интернете, 67 строчка связана с тернарным оператором. Я правильно понял, что если head == 0, то вернется true, если нет, то false? Про 16-ю строчку вообще ничего не понял, нарыл только что-то связанное с конструкторами класса, но на сколько я понимаю, это не тот случай. По этому прошу помочь разобраться.
>>1277817 > Я правильно понял, что если head == 0, то вернется true, если нет, то false? Йеп
> нарыл только что-то связанное с конструкторами класса, но на сколько я понимаю, это не тот случай. По этому прошу помочь разобраться. Конструктор который ничего не принимает и инициализирует head в ноль
>>1277817 Если это действительно, что-то связанное с классами, то есть ли другое объяснение этому двоеточию. Классы мы только начали проходить, а это долг полугодовой давности, т.е тогда мы знать не знали про классы. И возможно препода не устроит такой ответ.
Ребят, поясните пожалуйста, как подобное реализовать на плюсах. Интересует та часть, что со статичным инстенсем класса. Подобное юзал в юнити как синглтон для написания гейменеджеров, после переката на анрил возникла такая проблема.
Структура с полями abcdef. Почему в с++ отказались от подобного синтаксиса инициализации структур? В си работает, в с++ только если указывать несколько последовательно объявленных в структуре полей, из-за чего весь смысл указания имён полей теряется.
>>1277558 Для краткости, это же пример. Да там и вся программа просто поделка на один день, просто попробовать сделать одну штуку.
#if defined TEST #define TEST_COMMON_DLLSPEC Q_DECL_EXPORT #else #define TEST_COMMON_DLLSPEC Q_DECL_IMPORT #endif
class TEST_COMMON_DLLSPEC Widget : public QWidget { ......[/code] Что это за залупа такая? Реально эти макароны писать надо? Что-то я не припомню, как я раньше хоть раз такое видел.
Всегда хотел вкатиться в плюсы, но всегда было как-то лень, но месяц назад я сказал ВСЕ! Я СДЕЛАЮ ЭТО!. И как же у меня сгорела жопа за этот месяц, ЕБАНЫЙ ТЫЖ СТРАУСТРУП.
Но на самом деле пока все нравится. PS ебал визуал студио с его стандартами
Будет ли прирост производительности если я каждую переменную буду инициализировать как type* varName = new type, а затем после ее ненадобности удалять их через delete varName?
Поясните за QT framework. Что за йоба такая и с чем его едят. Кроме того, можно откуда нибудь скачать просто нужные либы и юзать их? Не хочу я ставить сверх визуал студии 100гб этого фрейма.
>>1278782 Плюсы - это голый язык, файлы да терминал. Чтобы использовать хоть что-то ещё, надо либо использовать вызовы ОС, либо самостоятельно, либо через фреймворк. Qt - оконный интерфейс, сеть, интернет-соединения и очень много всего другого. В идеале, если ты не используешь платформенных особенностей и пишешь портабельный C++-код, твою программу можно собрать под любую платформу, которую поддерживает Qt.
>>1278795 Допустим в планах десктоп под шиндоус + много работы с винапи и системой в целом. Стоит накатывать QT? Или есть какие-то другие библиотеки/что-то еще? И как это все гуглить? Пытался найти библиотеку для работы с винапи - соснул хуй, якобы везде всё пишут сами. Спасибо за ответ.
Есть тут чтецы книги Липмаана? Заканчиваю главу про копирование, присвоение, удаление.
В предыдущих главах были описаны вот такие классы, которые получают текст из файла и возвращают результат поиска. При этом оба класса ссылаются на динамически созданные данные. Плюсом этого вижу то, что класс QueryResult будщет выдавать результат даже после удаления и или изменения класса TextQuery.
class TextQuery { public: #ifdef TYPE_ALIAS_DECLS using line_no = std::vector<std::string>::size_type; #else typedef std::vector<std::string>::size_type line_no; #endif TextQuery(std::ifstream&); QueryResult query(const std::string&) const; void display_map(); // debugging aid: print the map private: std::shared_ptr<std::vector<std::string>> file; // input file // maps each word to the set of the lines in which that word appears std::map<std::string, std::shared_ptr<std::set<line_no>>> wm;
// canonicalizes text: removes punctuation and makes everything lower case static std::string cleanup_str(const std::string&); };
Так вот в конце главы про копирование вопрос: Должны ли классы TextQuery и QueryResult определять собственные версии функций-членов управления копированием? Я так вижу что при текущей реализации класса достаточно синтезируемых. При копировании обоих классов у нас увеличиваются счетчики ссылок shared_ptr что исключает удаление данных. Если же один из скопированных экземпляров будет удален, счетчик уменьшится и все довольны.
Сап всем. Помогите начинающему. Искал на просторах сети код программы для перевода из 10чной в 16ную систему исчисления. Нашел, подправил чтоб нравилось мне. Работает код, поясните только откуда там блять взялись эти 48 и 55, понимаю что наверное тупой вопрос, но реально не понимаю. https://pastebin.com/E7E0xzNK
>>1278851 Все говорят что говно + нихуя не упрощает работу. Ахуеть блять, почему за 20 лет никто нормальных библиотек не наклепал? Не верю, что все десктоп-мани на чистом winapi делают. Придется качать QT.
>>1278693 Кидай вижуал студень. Лучше скачай Qt Creator - нормальная такая ide, можно с g++ и линуксом юзать, на винде тоже норм и главное НЕ ТОРМОЗИТ ААА СУКА КАК ЖЕ Я РАД ЧТО ПЕРЕШЕЛ НА НЕГО С ЕБАНОГО ВИЖУАЛ СТУДИО
>>1278693 >>1279166 Кидай вижуал студень. Лучше скачай VIM - нормальная такая ide, можно с g++ и линуксом юзать, на винде тоже норм и главное НЕ ТОРМОЗИТ ААА СУКА КАК ЖЕ Я РАД ЧТО ПЕРЕШЕЛ НА НЕГО С ЕБАНОГО ВИЖУАЛ СТУДИО
как в QtLocation создать MapPolygon ручками, а не прихерачив его заранее в коде? ну тип, что я тыкая мышкой по карте, собрал свой полигон, и потом с ним что-нибудь делал?
>>1279858 Я миддл разработчик, который сейчас находится без работы, и ищет новые предметные области, ибо пятый год подряд трачу жизнь на десктоп парашу (стек Qt/Qml). Меня просто уже заебало.
>>1279884 >Потихоньку ковыряю вулкан Ну это ты зря. Реальный профит с него могут получить только те, кто прохавал работу с gpu с самого низа (вплоть до драйверов). Лучше ковыряй какой-нибудь UE и посмотри на opengl + glsl, чтобы понять общие принципы работы с графикой. >>1279512 Основной спрос на графику составляет гейдев. Если ты опытный разраб с нормальной ставкой, то вкатываться в него ты скорее всего не станешь. Бесконечный поток студентов сильно режет зарплаты и создаёт на редкость скотские условия труда (дешманский "офис", забитый под завязку, испыталка от полугода, ~70% зп в серую, праздники рабочие, отпуск 2 недели, в "соцпакет" входит только оплачиваемый больничный, отношение к новичкам как к бесправному говну).
>>1279920 > Бесконечный поток студентов сильно режет зарплаты и создаёт на редкость скотские условия труда (дешманский "офис", забитый под завязку, испыталка от полугода, ~70% зп в серую, праздники рабочие, отпуск 2 недели, в "соцпакет" входит только оплачиваемый больничный, отношение к новичкам как к бесправному говну).
Примерно такого ответа ожидал. Я просто работал 4 года в тепличных условиях и конкуренции особо не застал, поэтому мне было интересно услышать опыт тех, кто что-то знает об этих всех скотских условиях и дерьме.
>Если ты опытный разраб с нормальной ставкойx
Да не то что бы, я не особо далеко ушел, на $15 в час ковырял десктопную парашу, все проекты одинаковы и чувствую эмоциональное выгорание. Хочется свежего глотка воздуха да и предметную область с большим потолочком, чем десктоп.
>>1279924 опиши примеры проектов? Сколько человек, что вообще получается на выходе?
Сам уже 7 лет работаю в 1С и меня уже доебала эта область. Я конечно не считаю это нормальным программированием, так еще и работа вся заключается в том что запрос - выборка таблицы ,обработка таблицы, ну и что-то в форме поковырять. И бесконечная ебота с проблемами пользователей, то остатки у них то еще что. Хотя именно этим я почти не занимаюсь.
Думаю перекатиться в с++, который когда то еще со школы изучал. Читаю пока Липпмана. Хочется работать над чем то реальным и на реальном ЯП. Правда как пережить даунгрейд по ЗП не представляю
Такой вопрос. В консоль надо вводить числа. Если я введу букву, то cin ломается. Это понятно. Но почему не работает связка cin.clear(); cin.sync(); после этого места, чтобы попытаться ввести число заново?
>>1280518 Короче, в зависимости от того, какой у тебя формат ввода, ты по-разному можешь пропускать. Можно по одному, можно пропустить до следующего пробела и т.д.
Препод задал написать бинарное дерево с дубликатами, ну то в котором могут хранится одинаковые ключи, и вот я думаю.
Насколько я помню, есть два варианта добавления уже имеющегося ключа в дерево, либо в тупую вставить его имеющемуся потомку елемента с соответствующим ключём как правого или левого потомка в зависимости от ключа нового элемента блять, надеюсь вы поймете, либо вставить новый елемент как потомок елемента дерева с соответствующим ключем и разорвать старые связи с потомками, а потомкам присвоить новый элемент как родителя. Поправьте пожалуйста если в чем-то не прав.
Так вот, реализовать само дерево могу, вставку двумя описанными выше вариантами тоже, но не могу определиться как будет правильно - left <= root < right или left < root <= right, не так много инфы по этому поводу смог найти. А так же, я хз как оптимизировать вставку, вот допустим, у нас есть дерево:
5(root) 4(left) 6(right)
Вставляем значение 5, присваивая новые связи по правилу left < root <= right:
5(root) 5(right) 4(left) 6(right)
Как теперь вставить 4?
Вот тут я и запутался, ибо если вставить новый ключ с значением 4 как левый потомок рута, как я понимаю, быстрый поиск по дереву наебнется, ибо если нужно будет найти все значения по ключу 4, то поиск пойдет по левой ветке, игнорируя правую, т.к 4 < 5. Решить это можно так:
5(root) 5(left & right) 4(left) 6(right)
Теперь при вставке нового ключа 4 он присвоится после уже имеющегося ключа 4:
Но, чисто логически, может ли родитель в бинарном дереве иметь как правого и левого потомка один и тот же элемент, поидее это наебнет рекурсию, если нужно будет посчитать сумму значений элементов, например, элемент являющийся одновременно и левым и правым потомком будет учитываться два раза при рекурсивном подходе, что не есть хорошо, но я думаю это можно пофиксить если посидеть и подумать, у меня уже есть пара идей допустим сравнивать адреса потомков елемента, если их адреса равны, то соотественно можно пропустить один проход по любой из веток, не важно.
Ну и как третий вариант, можно сделать чтобы поиск шел по обоим веткам, вне зависимости от того меньше значение или больше, но толку тогда от такого дерева?
Я понимаю что лезу в дебри и можно просто на похуях запилить кастрированное говнодерево, препод и так схавает, но эта тема что-то затронула в моей душе что я не могу дальше писать код пока не разберусь как лучше сделать.
Подскажите как лучше, или помогите нагуглить.
inb4: ЧЗНХ???????????? ПИЗДУЙ ОТСЕДА, ДОВН. - Я ньюфаг, читал пару книжек, но опыта работы с деревьями мало и я хз как это гуглить, гугл упорно молчит по поводу деревьев с дублирующимися значениями, либо я не так гуглю, не спорю. Если пригорело от того что я возможно не учел то что тебе кажется очевидным и ты считаешь лучшим вариантом меня оскорбить - скрой пост чтобы глаза не мазолило и иди себе дальше, пожалуйста, я очень ранимый, не доводи до греха...
#include <stdio.h> #include <cuda.h> __global__ void hello() { printf("Hello cuda\n"); } int main() { hello<<<1,1>>>(); cudaDeviceSynchronize(); return 0; } Компилируется, запускается, но при этом не печатает ничего. Что не так?
>>1281267 >5(root) >5(right) >4(left) 6(right) Даже (4)5(6), 5((4)5(6)) нагляднее, мне кажется. Нарисовал бы на бумажке, сразу же сам бы понял.
>присваивая новые связи по правилу left < root <= right >ибо если нужно будет найти все значения по ключу 4, то поиск пойдет по левой ветке, игнорируя правую >игнорируя правую Там и должно быть, у тебя требование, что в левой ветке все ключи строго меньше 5. Неправильная вставка, у тебя дерево 5((4)5(6)) не подходит под правило, 4 каким-то образом оказалось правее 5.
У тебя так или иначе образуется сегмент с двумя одинаковыми ключами один из которых правый для другого. Нужно или перемещать левую 4-ветвь к верхнему, или при добавлении спускаться вниз (пока значение не станет отличным от 5) и помещать новый 5-ключ на место старого 6-ключа. Тогда будет выполнено требование к дереву. Просто подумай чуть-чуть об алгоритме слияния двух деревьев, и всё станет ясно.
В общем никакого отличия от дерева со стогим неравенством ключей нет, я не понял где ты запутался. Просто при поиске если ключ совпадает, то не прекращаешь поиск, а спускаешься по правой ветке. Ты каким-то образом вставляя в (4)5(6) новое 5 получил дерево 5((4)5(6)). Если бы ты вставлял 10 по тому же алгоритму, ты бы получил ((4)5(6))10 или 5((4)10(6)). То есть ты по каким-то причинам сам этого не замечая делаешь исключения для вставки элемента, если его ключ совпадает с уже имеющимся, хотя в твоём условии явно прописано left < root <= right, что говорит и критериях вставки любого элемента.
>>1281377 >Даже (4)5(6), 5((4)5(6)) нагляднее, мне кажется. Нарисовал бы на бумажке, сразу же сам бы понял. Вакаба сожрала табуляции, к сожалению, я такого не ожидал.
Ребят, много где при приеме на работу на плюсишках написано >Опыт разработки на С++ многопоточных сетевых приложений для Linux; Где можно поучиться разрабатывать приложения для работы с сетью? Дома такое вряд ли можно протянуть на приемлемый уровень
Аноны, можете подсказать как это работает? Сейчас читаю Прату, тут в шаблонных класах примеры дружественных функций, и в одной из программ Прата задаёт значение статическому члену без функций, при том что он находится в закрытом разделе. Как это возможно то?
>>1281857 Это особенности плюсов, в шарпе например не так, там можно тупо в теле класса инициализировать статическую переменную. А вот в плюсах статические переменные должны инициализироваться в той же области видимости где находится класс, обычно сразу после тела класса по-моему даже обязательно, но это не точно. В методах класса ты можешь менять значение, но инициализация для дальнейшего использования происходит именно так.
Посмотри на инициализацию внимательно, это специальная конструкция для инициализации статических переменных в классах, даже если они private, такая конструкция не значит что через неё всё в области видимости получают доступ к такой переменной, её нельзя написать в том же main(), это существует сугубо для инициализации.
>>1281913 Для записи : a(_a), b(_b) не определён порядок инициализации. Если важно, что b инициализируется после a, то придётся писать a=_a, b=_b в теле конструктора.
>>1282085 Просто различных. Я могу получить одну, например std::hash<std::string>(), но мне нужно несколько разных. Для одного и того же типа. Просто чтобы разные значения возвращали. Например, если там полиномиальный хэш, то с разными множителями.
Нужно написать шаблонный класс для обработки контейнера. И в классе нужно хранить итератор, но непонятно какой у него тип. По идее это тип, возвращаемый container.begin(), но как это описать в коде?
Аноны, может кто подсказать почему после этой функции программа зависает. В самой программе всё рабочее, а после ее выполнения всё. Она по идее должна сортировать диагональ двумерной динамической матрицы
>>1282382 Обычно в контейнере делают так: class <typename T> Container { typedef T value_type; typedef value_type* iterator; } И там, где тебе нужен тип итератора, ты пишешь (например): Container<int>::iterator it; Не ленись, посмотри исходники std.
>>1263368 (OP) Анон, я знаю, что меня скорее всего пошлют нахуй тут, но 1) если изучать с++ в 39 часов в неделю, за сколько можно стать джуном? 2) проганье, это внезапно то, на что у меня более менее стоит. 3) есть ли курсы годные(шапку читал) именно с задачками на то, чтобы вкатится на джуна. Т.е. - смотрю видео- читаю книжечку- делаю домашку- вкатываюсь в с++. От ваших ответов зависит, поставлю ли я анус или нет. 25 лет.
>>1282413 Потому что кадровики не в курсе, чем кресты от питона отличаются. Для них это одинаковые погромисты, тем более минимальной квалификации. А вообще кресты посасывают по средней зарплате и дают реальный выигрыш только для синёров.
>>1282423 >>1282423 Меня интересует вкат в профессию, ибо алчный мудак и хочу денег и заниматься полезным. Вкат в С++ я думаю, возможен и дойти до ебучего IT-архитектора при должных усилиях жопы возможен за 7 лет. Меня интересует нормальное проганье, но зайя на HH я вижу-нужен C++ 1 год проганья. Вопрос- это у меня в трудовой книжке записано должно быть записано или я могу сказать ,что у меня год? У меня так-то 6 лет,которых я пинал хуи в вузе С++. Если нужен для этих тупорылых HR просто запись в книжке- я тебя внимательно слушаю, где такой НИИ, где я буду джуном C++ зная чуть более,чем нихуя.
Алсо, что вы думаете про курс специалист от МГТУ имени баумана?
>>1282440 Так, тогда ещё вопросы: 1) Актуальны ли книги в шапке- или нужно читать максимально близкие к 2018 книги по с++. Шлее норм? 2) Есть ЗАДАЧКИ ЧТОБЫ ВОТ СДЕЛАТЬ И ВЫЛОЖИТЬ НА ГИТХАБ ИХ ТЕБЯ ПРИНЯЛИ В КРУПНУЮ КОМПАНИЮ НА 300 КККК В НАНОСЕК. ну или хотя бы бичом за 25к 25-кун близок к ставке ануса.
>>1282431 >ибо алчный мудак и хочу денег тогда тебе в Web >дойти до ебучего IT-архитектора при должных усилиях жопы возможен за 7 лет это вообще не про конкретный язык программирования >но зайя на HH я вижу-нужен C++ 1 год проганья Иди и собеседуйся. Скажи что в своей шараге курсачи писал на c++. Если будут посылать не стестняйся спросить как тебе получить необходимый опыт.
И вообще сцуко ты 25 летний жлоб, а вопросы, как будто ты только что из своего манямира вылез. Ты ведь ещё нигде не работал, да?
>>1282444 1) Смотришь, когда вышли стандарты языка и смотришь дату выпуска книги. Если книга вышла позже - то смело читай. 2) Твой помойный гитхаб никто смотреть не будет. Понять, что это твой код, невозможно да и зачем в говне ковыряться. Обычно конторы дают тестовое или просят написать какой-нибудь код на месте.
>>1282446 Понимаешь, есть такое понятие,как отложенная гратификация. Вообщем был эксперимент, когда детям дали выбор- тебе дают конфету сейчас или две конфеты потом. Потом детям, которые выбрали 2 конфеты потом давали снова выбор- либо 2 конфеты сейчас либо 4 конфеты потом. И так несколько итераций. Я думаю, не надо объяснять, что в жизни стали успешны те, кто выбрал отложенную гратификацию- т.е. несколько конфет, но потом. Веб- это конфета сейчас. С++ это несколько конфет потом. Ибо полноценный вкат в С++ это около 700к при вжобывании потом. веб не настолько прибыльный,как С++ Senior а меня интересует глубокое погружение. Т.е. если мы говорим про архитектуру то web- это около 300к после 5 лет, а с++ это 450к-700к при вжобывании. К тому же С++еров мало, а веберов дохуя.
т.е. веб не настолько годный для мозга и все таки он скучный. На крестах же можно вкатится в очень хорошие зарплаты и самое главное это мне интересно более менее. В шараге я писал на С++ первый курс, потом я пинал хуи и я теперь всё забыл. работал и работаю.
>>1282454 >в жизни стали успешны те, кто выбрал отложенную гратификацию кто не сидел на жопе ровно >С++ это несколько конфет потом. Нахуй нужен язык, который тянет за собой легаси говно с начала 90-х, у которого уже сейчас стандарт более 1500 страниц? Его заменят на более лаконичную версию и тебе, пирожок, придётся переучиваться (опять). >web- это около 300к после 5 лет, а с++ это 450к-700к при вжобывании. Пример для тупых: ты работал 5 лет за 100к, а вася за 150к в вёбе. Потом тебе подняли зарплату до 200к. И вот вроде бы ты васю выебал, ан нет. Тебе ещё придётся поработать 5 лет, чтобы ваш суммарный доход за 10 лет стал одинаковым. И более того, васян мог поиметь процент с той суммы которую ты недополучил (купил хату раньше тебя или под процент их в банк положил). Поэтому тебе, будущий синёр-архитектор с++, придётся ещё пару-тройку лет васю догонять. (итого до получения реального профита потребуется въйобывать 13 лет). >К тому же С++еров мало, а веберов дохуя. Ну да, чем больше рынок, тем больше требуется рабочей силы для его насыщения. >С++ это около 700к при вжобывании потом >В шараге я пинал хуи и я теперь всё забыл дайте мне 700к, а вжобывать я потом буду
Те большие зарплаты, которые ты видел, они не про идеальное знание с++, а про отличное знание предметной области и умение писать всякую сложную и высокопроизводительную алгоритмическую ебанину с применением матана, статистики и прочего саенса.
>>1282454 >>1282466 Кстати, хорошоий пример для тестового. Загугли, что такое сложный процент и напиши программу, которая вычисляет время, за которое суммарный доход c++ и web кодеров становится одинаковым. Входные данные - процент (можешь взять ставку рефинансирования с cbr.ru), массив с тройками: salary_web, salary_c, time_stamp (в моём примере {{150,100,0}, {150,200,5}}).
>>1281942 > А вот в плюсах статические переменные должны инициализироваться в той же области видимости где находится класс Неправильно. Объявление статической переменной должно быть повторено вне класса для того, чтобы она хранилась только в одном месте, а не в каждом коде, включившим заголовок. В какой-то версии плюсов есть static inline - каждая единица компиляции имеет копию статической переменной.
>>1282498 >В какой-то версии плюсов есть static inline - каждая единица компиляции имеет копию статической переменной. При этом повторять объявление вне класса не нужно.
>>1282498 >>1282499 Ну может нам в универе недообъяснили про inline, но то что ты написал исходит из простой логики и я не вижу противоречия написанному мною.
static переменные, хоть паблик, хоть прайват - нельзя инициализировать в методах класса и любых других функциях в области видимости, хз что тут "неправильного".
>>1282508 А, это да. Просто вопрос бы скорее про то, почему это делается вне класса. Инлайн-переменные можно инициализировать прямо в классе. "Нет" это в ответ на это: >это существует сугубо для инициализации. Нет, не для инициализации.
Аноны, можно ли где-то найти более-менее подробный гайд по рекурсивным функциям, желательно с примерами и задачами для самостоятельного решения? А то везде какие-то примитивные задачи уровня найти факториал и общая информация
>>1282755 На рекурсии сортировочки делаются и всякие алгоритмы на графах/деревьях. Можешь на таких задачках попрактиковаться или поизучать готовый код.
>>1282782 Я не шибко разбираюсь, но если у тебя РПГ с сохранением прогресса, то можешь хранить инвентарь в отдельном файле сохранений - а вообще для этого бд используют. Либо какой-нибудь json заюзать. А для сессионной текстовой РПГ можно и вектор использовать, мне кажется.
Аноны, может кто подсказать: код в плюсах всегда выполняется одновременно? Мне вот дали задание отсортировать диагонали матрицы и сравнить точку их пересечения, и если она равна то делать что-то. Я так понял нужно после сортировки главной диагонали запомнить середину, и после сортировки второй опять запомнить середину и сравнить. Сделал так - значения копируют друг друга. Попробовал распихнуть сортировку обоих диагоналей в функции и сравнить между собой потом - всё равно одинаково. Что я делаю не так?
>>1282995 Блять, ошибка оказалась в том, что я на еденицу ошибся с центром диагонали и оно брало статичный элемент. Пиздец я тупой, извините что беспокою
>>1283012 Ну давай разберем по частям. маня, тобою написанное )) Складывается впечатление что ты реально контуженный , обиженный жизнью имбицил )) Могу тебе и в глаза сказать, готов приехать послушать?) Вся та хуйня тобою написанное это простое пиздабольство , рембо ты комнатный)) от того что ты много написал, жизнь твоя лучше не станет)) пиздеть не мешки ворочить, много вас таких по весне оттаяло )) Про таких как ты говорят: Мама не хотела, папа не старался) Вникай в моё послание тебе< постарайся проанализировать и сделать выводы для себя)
>>1283012 Поставил бы интуитивно понятный printf("%f\n",numbers[i]) и сразу бы было всё понятно, зачем тебе этот новомодный мусор? Там и всякие настройки есть, вроде +07.3f, которые через cout оче неудобно выставлять. Пропиши что-то вроде cout.precision(8) перед выводом твоих чисел.
>>1283012 Я вообще не всекаю, как у тебя срабатывает cout для объекта класса vector, оно даже скомпилироваться не должно. Сделай numbers[i] и должно будет работать
>>1283064 По лимпану, б раньше. Он даже приводил пример, когда один член инициализируется значением другого. Порядок именно по порядку объявления в классе, а не в инициализации конструктора. Я проверял
>>1283068 да, сначала будет выполнено a(_a), потом b(_b). а теперь напишем вот так: struct S { int a; float b; S(int _a, float _b) { b = _b; a = _a; } }; в данном случае сначала b получит значение _b, а потом a получит _a. вот про такую "смену порядка инициализации" я писал выше.
Читаю Липамана. Есть свой класс аля вектор строк StrVec со своим аллокатором alloc и членами: elements - указатель, возвращенный alloc.allocate(), first_free - указатель после последнего созданного элемента.
Есть процедура очистки, которая вызывается в деструкторе:
For(auto p = first_free; p! =elements) alloc.destroy(--p);
Как переписать этот цикл на for_each и лямбда-выражение?
Что за подстава в книге Фундаментальные алгоритмы C++? Роберт Седжвик Во введении автор обещает рассмотреть во втором томе кучу всего, а на деле там только графы. Как так?
Пикрилейтед, особенно обидно за геометрические алгоритмы, может кто посоветовать замену?
>>1283368 Не знаю, из какого контекста что понятно, но из твоей дальнейшей переписки понятно, что ты не > Запись не определяет порядок инициализации. имел в виду, а просто нихуя не знаешь.
>>1283445 А вот в оригинале книга называется просто Algorithms. Не устраивает только то, что автор обещает одно, а на деле другое (либо я не увидел), причем издание третье, а текст со структурой тот же
Мудрейшие, помогите затупку. Мне нужно узнать колво символов в string и положить это число в переменную int. В гугл уже ходил, ничего не нашел. Пишу в codeblock компилирую gnu gcc.
>>1283567 Да там вообще библиотек разных подключило неявно дохуища. Создал новый проект, выдаёт ту же хуйню. Аноны, кому не лень, можете проверить у себя код?
>>1283568 Прошлые проекты у меня работают, создал новый - тоже. Тут где-то в коде ошибка видимо, но я не пойму где, и почему оно подключает какие-то левые библиотеки и говорит что они не определены?
>>1283568 >>1283571 А бля, падажжи. Инклуд - это инклуд, реально берётся и вставляется текст. Ты инклудишь iostream после своих заголовков. Инклудь до.
>>1283580 На самом деле я надеялся на то, что ошибку в твоём коде покажет. Анализаторы кода чудеса творить не могут, и в общем случае ошибка в коде вызывает ошибки во всём оставшемся, так что сначала надо инклудить проверенный код.
Но если ошибки в коде, оказывается, не было, то варианта два: - 5%: ты случайно определил какой-то макро или идентификатор, которые используется в одном из 100500 заголовочных файлов - 95%: это блядская студия виновата, говнокод на говнокоде
Немного совета тем, кто начинает свои кресто- блядские похождения. А у меня это уже 6ой год. НАХУЙ кресты. Если вы - не совсем законченный нерд, то НАХУЙ. В постсовке - тем более нахуй. Работаю с геймдеве и у меня уже очко просто полыхает. Сука, каждый день - АНАЛитическая геометрия, вставки под АСМ, ебля с памятью, вечно что-то крашится, что-то наёбывается, триллион эсепшнов, вечная проблема с архитектурой потому что забыл мельчайшую хуйню - всё, пизданулось нахуй, а ЗП - хуйня при том, что я - СИНЬОР Блядь, за что мне это. Мало того, что мне пришлось перед тем, как стать джуном ебануть 3 игоры, задрочить OpenGL и запилить их на гит, так еще и не брали нигде, но это похуй а на всё это я въебал полтора года жизни. Какого, мать его, хуя, у меня френд - ПАЙТОНИСТ пинает хуй в дейта сайнс и получает больше ? Просто пидорская хуйня, у меня проф. выгорание, на этом всё. Сука, знал бы всё это, пошел бы в веб- дев. У меня всё, очко порвано. как пережить эту стадию проф. выгорания ?
>>1283628 Просто не надо в гейдев идти. Я со смежной отрасли ходил на собесы в ваши конторы. Нигде большего дна я не видел. Зп мне 130к предлагали, но опять же в серую с "испытательным сроком" пол года, "трудовой договор" - сплошные обязанности и никаких прав плюс штрафы. Офис задроченный, погонщики вкрай охуевшие (особенно hr выбесили). Кстати геометрия хуйня у вас там, ну по сравнению со всякими приблудами для машиностроения, робототехники и проч. Зато пердолилово с железом и памятью да - на уровне. То что нахуй в Раисе кресты не нужны это верно. Раз уж выбрал кресты - то сразу готовь трактор.
>>1283628 >как пережить эту стадию проф. выгорания ? Возьми перерыв в полгода и за это время выучи новый язык/стек. Затем вкатывайся в новую сферу. Бывших крестовиков охотно берут на Go/Golang, например.
>>1283576 >Ты инклудишь iostream после своих заголовков. Инклудь до. >>1283595 >Буду включать файлы до заголовочных. Вообще заголовочные файлы должны быть самодостаточными. Если у тебя компиляция зависит от порядка заголовков, то ты лох.
>>1283873 Ну, у меня сейчас выбор - голанг и ведроидоприложухи или же пайтон и биг дейта. Вот не знаю, что выбрать. Математическая база у меня хорошая, вроде как. Что подскажете, анонче ? Вчера, после очередной утечки памяти, с которой я ебался целый день, бомбанул прост (причем в родительском классе все было выкручено, что даже ПТРами не отделался).
>>1283912 Иди на ведро - там за графениум хорошо платят. И да, ещё раз напомню - хуйня у вас там в геймдеве, а не математика. Векторные произведения и матрицы твои с кватернионами это максимум на 2 курс провинциального вузика тянет.
В каких случаях вы переопределяете оператор "/". Я, например, столкнулся с таким его использованием. Имеется класс Path, который определяет путь к каталогу, и мы хотим добавить к этому пути поддиректорию
Path p("a/b/c"); p = p / "d";
В итоге получаем путь "a/b/c/d"
У меня истерика. Зачем, двач? Почему не append("d") или add("d")? Зачем эти выебоны? Это что, сложность ради сложности?...
>>1284329 Все фичи плюсов, на самом деле, делаются ради этого. Концепты, рефлексия, метаклассы, констэеспр, фолдинг выражения? Кому они нужны? Зато мы можем всем показать, как можно у нас классно сделать.
>>1284287 Понимаешь, плюсы само по себе - это сложный язык с кучей неписанных правил. http://libtins.github.io/ - вот, смотри, они тоже слэш перегружают. Лично мне лишние скобки не нужны, я бы лучше оператор перегрузил. Если я в коде увижу path / file я сразу пойму, что это значит, это понятно интуитивно. >>1284329 чо вы там можете блядь где перегрузка амперсанда сука
>>1263368 (OP) Сап /cpp. Я решил написать после вузовского перерыва свою первую задачку. 1. Начнем с того, что Я САМОСТОЯТЕЛЬНО НАСТРОИЛ ЭТОТ ЕБУЧИЙ QT, ЧТО УЖЕ ВИН!!! 2. Я написал программу, это оказалось немного легче. Но есть проблема: 1. Как вставлять код, чтобы выглядело годно.У джаваскриптеров есть сайти для этого. Есть ли сайты у нас. 2. Программа.Дано: Есть биткоин-бот. который хуярит процент от суммы за месяц. Есть зарплата анана, и есть процент, под который бот хуярит в месяц. Есть количество месяцев. Т.е. анан хочет денег и дает в первый месяц 200к. Бот делает под 4% Зарплата анана на 40к. Расчитать прибыль бота за год, при условии, что анан будет вносить туда каждый раз 40к. 1. Я написал код. 2. Он скомпилировался без ошибок. Но, после того, как я ввожу input_bot_percent мне программа одновременно выдает введите current_amount и month_iteration и после этого закрывается. Вопрос 1. ХУЛИ ЭТО ГОВНО НЕ ДАЕТ ВВЕСТИ МНЕ начальное количество денег.ЧЯДНТ? Вопрос 2. Как сделать так, чтобы оно не закрывалось при окончании. Не кидайтесь тапками,плиз. Это моя первая программа. код ++++ #include<iostream> using namespace std; int main() { long double money_input, percent, current_amount; int month_iteration = 0 ; cout<<"Input your salary!"; cin>>money_input; cout<<"input_bot_percent"; cin>>percent; cout<<"input start_current_amount"; cin>>current_amount; cout<<"month_iteration"; cin>>month_iteration;
>>1283639 >>1284482 >>1284487 >>1284489 >>1282466 Я этот кун. Хотел бы узнать у вас некоторые вещи. 1) область, где вы кодите(геймдев,базы данных, машиностроение) 2) сколько шли до джуна 3) стаж в профессии. 4) З/П
Есть бинарник, хранящий standart layout структуры. Как осуществить удаление данных в нем? Скажем, хранится два объекта структуры, нужно один из них удалить => файл должен стать вдвое меньше по размеру.
Интерфейс fstream, вроде, этого делать не позволяет.
Аноны, есть вопрос по поводу компиляторов и проблемы с функцией Аккермана. В ВС17 после компиляции выводит дохуя значений и кнсоль дропается. На OnlineGDB после вывода значений пишет ошибку - ''core dumped''. А вот на С++ Shel у меня нахуй повис комп и всё пизданулось, пришлось перезагружать комп. Почему так происходит ? Почему в ВС17 и GDB всё нормально, а на Shel'ле нет ? За переполнение стека знаю
Тред контроля версий тонет где-то очень глубоко, поэтому спрошу у крестовых бояр как мне быть, вы уж точно знаете не к веб-макакам же идти за советом. Хочу следить за изменениями и вести контроль версий своих хеллоувордов. Как это все организовать не выходя за пределы моего пк? Чтобы код лежал не на гитхабе, а допустим у меня на харде. А то я уже заебался, что-то поменяю и все перестает работать, а я даже не помню где код правил.
>>1285010 Для удобства поставь себе графический клиент для git. Я юзаю черепашку TortoiseGit. После установки у тебя в меню по нажатию правой кнопки мыши появится gitclone и create repository here. Дальше всё очевидно.
>>1285573 В данном случае польза const не так очевидна. Почитай мейерса, там есть пример, в котором он показывает, почему const следует использовать где только можно. Это позволяет избежать неявных шибок во многих случаях
>>1285534 >Константный метод возвращает константную ссылку. Неправильно. Не константную ссылку, а ссылку на константу. >>1285573 Если это метод, const - это квалифаер. То есть, этот метод может вызываться только для const-объектов, и вернуть свой член по ссылке на неконстанту нельзя.
>>1285573 Ты можешь ссылаться на переменную по двум причинам: - тебе нужно, чтобы вне функции в неё что-то писали - избежать копирования Ставя или не ставя const ты говоришь именно это.
Посоветуйте книжку по MFC/WinAPI. Надо сделать утилитку на dialog-based MFC, сам язык я, в принципе, знаю, а вот структура приложения какая-то непонятная
>>1285786 Блять, метод возвращает "const string&", даже если поле не константное будет просто возвращена константная ссылка - https://pastebin.com/Zr8jCZsZ
Аноны, есть ли книги конкретно по STL? А то Прата описывает теорию, но постоянно добавляет что ее слишком дохуя, и рассматривает основные концепции. Есть книжка именно с идеологией STL ну и задачками тоже или это всё на практике нужно понимать?
>>1285873 Уазатели именуются так (именование формируется при разборе с конца): 1. const (int p) - указатель на константу (нельзя p = 1;) 2. (int p) const - константный указатель (нельзя p = nullptr;) 3. const (int p) const - константный указатель на константу (нельзя 1 и 2)
Ссылки именуются аналогично. Разница лишь в том, что ссылка и так константная, поэтому писать 2 и 3 бессмысленно, хотя компилятор такой записи не воспрепятствует. 1. const (int r) & - ссылка на константу (нельзя r = 1). 2. (int r) & const - константная ссылка (то же что и (int r) &) 3. const (int r) & const - константная ссылка на константу (тоже что и п. 1)
Ну а ты обосрался с именованием и теперь копротивляешься.
>>1286062 В задании написано что должно превратить слово в подобие madamiamadam а потом выполнять проверку. Я два цикл написал нашёл на стаковерфлоу, которые выполняют проверку на знаки пробела и пунктуации. По идее должно сначала превратить слово в набор букв, а потом сравнивать
>>1286079 Во ебать, работает. Спасибо. На >>1285938 не ответишь? STL пиздец прикольно выглядит, хотел бы изучить. Но там книга еще на 1.2к страниц, это займет месяца полтора хотя учитывая сессию даже больше. Стоит пройти сначала бест практисы? Или там тоже STL?
В программе под винду должно быть несколько простых кнопок/ползунков/полей ввода и изображение, которое попиксельно генерируется в зависимости от ползунков. Для этого есть какая-то не слишком громоздкая библиотека или будет проще потратить час-два и вручную через gdi+ сделать изображение и эмулировать кнопки/ползунки? Никаких особых возможностей или удачности архитектуры не требуется, просто сделать как-нибудь и забыть.
Аноны, а на плюсах можно под андроид писать? Или это определенные языки только? Хочу себе цель поставить сапёра написать под свою слабую мобилку если нельзя то под пеку напишу
Аноны помогите. Почему-то затупил на какой-то очень простой задаче. Программа должна считывать строку и выводить кол-во символов до знака $. Выводит какие-то случайные значения. При небольших строках всегда один
>>1287748 В программе чуть-чуть разобрался, но всё же обьясните что не так в предыдущей версии. Ведь по идее cin.get должен по очереди изымать из потока по одному символу пока не дойдет до $. Или ошибка в том что cin.get(void) возвращает интовое значение? И еще вопрос: как работает этот код? Я ввожу строку и он так же по очереди изымает по символу пока не триггернется? cin.peek() использовал потому-что в задании сказали чтобы триггер-символ не учитывался.
>>1287827 Ошибка не в самой переменной, а в том что оно пытается считать не с входного потока а с переменной? Точнее считывает с переменной, а не с потока
Переменная k имеет тип char Оператор >> видит справа char поэтому читает строку (до пробела) и пытается записать в k. При этом портит память, так как места там только на один элемент. А цикл считает оставшиеся символы (тот самый пробел) и выводит 1.
Мне вообще интересно, что хотел сказать автор, когда писал эти строки.
Прошу помощи. Хотел разобраться с тем как работает next_pemutation и завис. Нашёл хорошую статью на стаковерфлоу, там всё достаточно чётко обьяснили. Но я всё равно не пойму. Как функция меняет значения с 1243 до 1324 за один переход цикла? Я так понимаю мы берем число и проверяем, что если все числа справа от него в убывающем порядке то больше возможных комбинаций справа нет. Но как блять оно перешло с 1243 до 1324, там ведь только свап нужен. И как работает while (!(i < --k)), оно должно выбирать наибольший элемент или как? И почему j меняет значение только иногда, оно ведь по идее должно с каждой итерацией меняться, разве нет? Статью с оверфлоу и скрин вывода вывод значений я для удобства добавил прикладываю. https://stackoverflow.com/questions/11483060/stdnext-permutation-implementation-explanation
Может кто помочь? Почему компилятор выдаёт какие-то ошибки при использовании варайбл шаблонов? Сталкивался кто? Использую студию 2012 экспресс. На онлайн компиляторах всё работает
>>1288872 Хуй знает, когда начинал кодить она первая попалась. Там все методы с С++11 работают, только #include <initializer_list> не хочет делать, но он в этой версии вроде не включён. А тут баг какой-то. Скачал себе студию 17 года от вуза бесплатно раздавали, если что буду переключаться.
Пытаюсь прикрутить glew к программе. Шестой час не могу собрать. У меня mingw-64 + cmake. Готовые билды с glew.sourceforge.net не работают (так как заточены под msvc или ещё что-то такое). Собрал через mingw сам, получил файлы libglew32.a и glew32.dll - программа теперь компилируется, но glewInit() возвращает GLEW_ERROR_NO_GL_VERSION, и функции старше gl 1.1 не работают, соответственно. Никакое сочетание флага GLEW_STATIC, glew32.lib/glew32s.lib и двух разных *.dll не взлетает. Единственное что заработало, это если явно добавить исходник glew.c к коду проекта, но мне не очень бы хотелось оставлять программу в таком виде. Бесят невероятно эти компиляторопроблемы. Хотел просто на спор написать демку с шейдером, кода на 20 минут, а я несколько часов тыкаюсь в унылые форумы в попытках найти решение. Причём, далеко не только у меня такие проблемы. А ведь это всего лишь невероятно простая и однообразная библиотека из одного файла. Бред какой-то, зачем вообще нужны все эти книжки из шапки, лол, если вообще всё что угодно в самом программировании проще вышеупомянутых проблем.
Что, что мне прочитать, что мне сделать, чтобы разобраться наконец в .o/.lib/.a файлах, статических и не статических линковках, cmake/make и других непосредственно с языком не связанных вещах?
Сап всем. Опять выхожу на связь. Столкнулся с проблемой которую не могу решить уже несколько дней. Есть single linked list в котором я никак не могу реализовать функцию считывания с файла. Ещё имеется дохуя не почищенной памяти по результатам valgrind, но это не главное. В общем кидаю код на пастебине, функция readFrom не делает то чего я хочу, постоянно выдаёт единицу ебаную. Читал всевозможные инструкции и гайды в интернете, последняя надежда на вас прежде чем пойду лобызить перед преподом. https://pastebin.com/dVsNkNu2
>>1293705 >single linked list Понятия не имею что это, но считывание работает. Только что лишний ноль закрался, но если закомментировать create(0), то нуля не возникает. Может быть он и нужен зачем-то, без понятия.
>>1293705 В общем, смотри содержание своего файла. Ты считываешь через getline по строкам, соответственно у тебя должно быть одно число в строке. Если в файле они через пробелы или ещё как, то нужно заменить getline и корректно это обрабатывать, вызывая atoi на каждое число, а не строку.
>>1293759 Разбей задачу на этапы, проведи исследование же. 1. Просто открой и закрой файл, посмотри нет ли ошибок, видит ли оно вообще твои файлы. Если не работает, попробуй через fopen или собственные убунтовые функции, если они есть. 2. Попробуй посимвольно без всяких atoi вывести файл. Потом построчно твои line, правильно ли работает getline (в люниксах вроде бы иначе переносы строк выполнены, если файл сделан на винде). 3. Попробуй вызови atoi для жестко заданных строк. Если не работает, считывай посимвольно и сам преобразуй символы в числа, например. Дел на 3-10 минут, и ты достоверно выяснишь на каком этапе и в какой функции проблема, где бы она не возникала. А то чёрт его знает, зачем пальцем в небо тыкать.
Ответы на все вопросы: http://eel.is/c++draft/
http://eel.is/c++draft/, пропущенный через кишечник макак: https://en.cppreference.com/w/cpp